From cda3acdceacab0aca2fe39b1d146ceb3b1863533 Mon Sep 17 00:00:00 2001 From: Magpie490 Date: Mon, 2 Jun 2025 16:22:24 +0100 Subject: [PATCH] idk why I dont have a cursor --- ...cal_export_easteregg_alexander_windahl.txt | 148 + ...rical_export_easteregg_anton_holmqvist.txt | 151 + ...torical_export_easteregg_anton_sorokin.txt | 167 + ...orical_export_easteregg_artur_kacprzak.txt | 164 + ...torical_export_easteregg_bahar_shefket.txt | 120 - ...orical_export_easteregg_bianca_savazzi.txt | 119 - ...torical_export_easteregg_celine_jensen.txt | 139 + ...ical_export_easteregg_christian_daflos.txt | 121 - ...ical_export_easteregg_claudia_baldassi.txt | 121 - ...torical_export_easteregg_daan_broekhof.txt | 152 + ...storical_export_easteregg_daniel_moore.txt | 121 - ...istorical_export_easteregg_david_drake.txt | 151 + ...istorical_export_easteregg_debbie_lane.txt | 120 - ...istorical_export_easteregg_elena_zenko.txt | 120 - ...al_export_easteregg_elisabeth_gangenes.txt | 122 - ...torical_export_easteregg_emil_tisander.txt | 55 +- ...orical_export_easteregg_fabian_franzen.txt | 159 + ...ical_export_easteregg_fei_berg_hulthen.txt | 121 - ...storical_export_easteregg_hanna_lohman.txt | 120 - ...storical_export_easteregg_hugo_cortell.txt | 122 - ...orical_export_easteregg_ismael_serrano.txt | 119 - ...torical_export_easteregg_jacopo_freddi.txt | 151 + ...orical_export_easteregg_jakob_jorstedt.txt | 147 + ...rical_export_easteregg_jakub_potapczyk.txt | 119 - ...orical_export_easteregg_james_beaumont.txt | 122 - ...rical_export_easteregg_joacim_carlberg.txt | 120 - ...historical_export_easteregg_joe_parkin.txt | 2 +- ...al_export_easteregg_johanna_hermansson.txt | 139 + ...ical_export_easteregg_johanna_uddstahl.txt | 138 + ...torical_export_easteregg_katya_boestad.txt | 120 - ...istorical_export_easteregg_linda_tiger.txt | 120 - ...orical_export_easteregg_linnea_thimren.txt | 120 - ...torical_export_easteregg_lucas_ribeiro.txt | 151 + ...rical_export_easteregg_lysann_schlegel.txt | 119 - ...torical_export_easteregg_malin_jonsson.txt | 121 - ...al_export_easteregg_mathilda_bjarnehed.txt | 120 - ...ical_export_easteregg_matthew_clohessy.txt | 119 - .../historical_export_easteregg_max_weltz.txt | 121 - ...cal_export_easteregg_maximilian_olbers.txt | 121 - ...orical_export_easteregg_milla_lankinen.txt | 119 - ...cal_export_easteregg_nicholas_meredith.txt | 123 - ...xport_easteregg_nikolaos_kaltsogiannis.txt | 119 - ...storical_export_easteregg_ola_jentzsch.txt | 122 - ...historical_export_easteregg_olof_bjork.txt | 122 - ...rical_export_easteregg_oscar_andersson.txt | 163 + ...historical_export_easteregg_paul_depre.txt | 120 - ...cal_export_easteregg_peter_johannesson.txt | 121 - ...orical_export_easteregg_petter_vilberg.txt | 121 - ...rical_export_easteregg_pontus_olofsson.txt | 120 - ...storical_export_easteregg_samet_atasoy.txt | 142 + ...l_export_easteregg_sandra_runge_moller.txt | 120 - ...istorical_export_easteregg_sean_hughes.txt | 120 - ...rical_export_easteregg_steacy_mcilwham.txt | 119 - ...ort_easteregg_stina_arvidsson_radestig.txt | 120 - ...storical_export_easteregg_tegan_harris.txt | 119 - ...torical_export_easteregg_tess_lindholm.txt | 120 - ...orical_export_easteregg_veronica_pazos.txt | 139 + ...torical_export_easteregg_zack_holmgren.txt | 120 - common/buildings/00_admin_buildings.txt | 479 + common/buildings/00_castle_buildings.txt | 267 +- common/buildings/00_city_buildings.txt | 280 +- .../buildings/00_duchy_capital_buildings.txt | 64 +- common/buildings/00_nomad_buildings.txt | 221 + common/buildings/00_special_buildings.txt | 241 +- .../00_standard_economy_buildings.txt | 8 +- common/buildings/00_temple_buildings.txt | 293 +- common/buildings/00_tribal_buildings.txt | 45 +- .../99_background_graphics_buildings.txt | 94 +- common/buildings/ccp3_special_buildings.txt | 1098 ++ common/character_interactions/00_alliance.txt | 288 +- .../00_artifact_interactions.txt | 1 - .../00_ce1_interactions.txt | 17 +- .../00_character_interactions.txt | 223 +- .../00_choose_favorite_interaction.txt | 2 +- .../00_court_amenities_interactions.txt | 5 + .../00_courtier_and_guest_interactions.txt | 15 +- .../00_debug_interactions.txt | 212 +- .../00_diarch_interactions.txt | 138 +- .../00_faction_interactions.txt | 6 +- .../00_fp3_interactions.txt | 57 +- common/character_interactions/00_gift.txt | 22 +- .../00_grant_titles_interaction.txt | 85 +- common/character_interactions/00_heir.txt | 8 +- .../00_invite_agent_to_scheme.txt | 83 +- .../00_marriage_interactions.txt | 126 +- .../00_modifiy_vassal_contract.txt | 908 +- .../00_perk_interactions.txt | 55 +- .../00_prison_interactions.txt | 170 +- .../00_religious_interactions.txt | 177 +- .../00_revoke_title_interaction.txt | 120 +- .../00_scheme_interactions.txt | 57 + .../00_test_interactions.txt | 2 +- .../00_tradition_interactions.txt | 10 +- .../00_tribal_interactions.txt | 321 +- .../00_tributary_interactions.txt | 2320 ++++ .../00_vassal_interactions.txt | 328 +- common/character_interactions/00_war.txt | 329 +- .../01_fp1_interactions.txt | 20 +- .../03_fp2_interactions.txt | 17 +- .../05_bp2_interactions.txt | 23 + .../06_ep3_interactions.txt | 230 +- .../06_ep3_laamp_interactions.txt | 12 +- .../06_ep3_scheme_interactions.txt | 34 +- .../06_ep3_test_interactions_.txt | 6 +- .../09_mpo_interactions.txt | 10439 ++++++++++++++++ .../traditions/00_realm_traditions.txt | 4 +- .../culture/traditions/07_ep3_traditions.txt | 8 +- .../00_appropriate_generic_words.txt | 8 + .../00_artifact_custom_loc.txt | 32 +- .../00_bp3_wanderer_loc.txt | 84 + .../00_building_custom_localization.txt | 172 + .../00_character_interaction_categories.txt | 137 + .../00_councillor_custom_loc.txt | 52 + .../00_event_custom_loc.txt | 6 +- .../00_food_custom_loc.txt | 152 +- .../00_government_custom_loc.txt | 91 +- .../00_insult_custom_loc.txt | 11 + .../00_interactions_custom_loc.txt | 2 +- .../00_maa_custom_loc.txt | 12 + .../00_martial_lifestyle_custom_loc.txt | 74 +- .../00_pet_custom_loc.txt | 351 + .../00_pl_custom_loc_extra.txt | 45 - .../00_regional_custom_localization.txt | 190 + .../00_relations.txt | 728 +- .../00_rich_presence_flavor_status.txt | 27 +- .../00_suitable_title_custom_loc.txt | 17 + .../customizable_localization/00_travel.txt | 244 +- .../00_vassal_custom_loc.txt | 66 + .../00_visit_settlement_custom_loc.txt | 224 +- .../00_war_custom_loc.txt | 19 + .../00_yearly_events_custom_loc.txt | 1 + .../01_bp1_custom_loc.txt | 6 + .../01_ep1_custom_loc.txt | 96 + .../04_ep2_custom_loc.txt | 8 - .../05_bp2_custom_loc.txt | 15 + .../07_ep3_custom_loc.txt | 30 +- .../09_mpo_custom_loc.txt | 699 ++ .../09_mpo_custom_loc_2.txt | 26 + .../99_fr_custom_loc.txt | 218 +- .../99_ru_custom_loc.txt | 451 +- common/decisions/major_decisions_NEOW.txt | 4 +- common/defines/00_defines.txt | 112 +- .../domiciles/buildings/00_camp_buildings.txt | 14 +- common/domiciles/types/00_domicile_types.txt | 150 + common/governments/00_government_types.txt | 234 +- common/governments/_governments.info | 35 + common/laws/00_realm_laws.txt | 453 +- common/laws/00_succession_laws.txt | 263 +- common/laws/01_title_succession_laws.txt | 61 +- .../00_cultural_maa_types.txt | 1233 ++ common/men_at_arms_types/00_fp3_maa_types.txt | 206 + .../00_holy_order_maa_types.txt | 41 + common/men_at_arms_types/00_maa_types.txt | 236 +- .../00_regional_maa_types.txt | 106 + .../01_accolade_maa_types.txt | 485 + common/men_at_arms_types/01_fp1_maa_types.txt | 169 + common/men_at_arms_types/07_ep3_maa_types.txt | 419 + common/men_at_arms_types/09_mpo_maa_types.txt | 397 + .../men_at_arms_types/_men_at_arms_types.info | 57 + common/on_action/game_start.txt | 1461 ++- common/on_action/title_on_actions.txt | 876 +- common/script_values/00_activity_values.txt | 112 +- common/script_values/00_ai_values.txt | 39 +- common/script_values/00_basic_values.txt | 26 + common/script_values/00_character_values.txt | 7 + common/script_values/00_council_values.txt | 22 +- .../00_county_control_values.txt | 30 + common/script_values/00_county_fertility.txt | 96 + .../00_court_amenities_values.txt | 14 + .../00_court_position_values.txt | 2302 +++- common/script_values/00_culture_values.txt | 99 +- common/script_values/00_diarchy_values.txt | 24 +- .../00_dlc_fp3_script_values.txt | 31 +- common/script_values/00_faction_values.txt | 30 + common/script_values/00_goverment_values.txt | 27 +- .../script_values/00_interaction_values.txt | 109 + common/script_values/00_law_values.txt | 126 +- common/script_values/00_legitimacy_values.txt | 26 +- common/script_values/00_lifestyle_values.txt | 12 + .../script_values/00_men_at_arms_values.txt | 45 +- common/script_values/00_mongol_values.txt | 18 +- common/script_values/00_scheme_values.txt | 319 +- .../00_visit_settlement_values.txt | 8 +- common/script_values/00_war_values.txt | 72 +- common/script_values/01_dynamic_values.txt | 32 +- common/script_values/02_religion_values.txt | 45 +- .../03_dlc_fp2_script_values.txt | 41 +- common/script_values/04_ep2_hunt_values.txt | 341 +- .../04_ep2_tournament_values.txt | 84 + .../script_values/04_ep2_wedding_values.txt | 31 +- .../script_values/05_bp2_hostage_values.txt | 5 + .../script_values/06_ce1_epidemics_values.txt | 62 +- .../script_values/06_ce1_legends_values.txt | 63 +- common/script_values/07_ep3_values.txt | 387 +- common/script_values/08_bp3_values.txt | 48 +- .../script_values/09_mpo_domicile_values.txt | 474 + .../09_mpo_the_great_steppe_values.txt | 5 + common/script_values/09_mpo_values.txt | 2866 +++++ common/script_values/10_health_values.txt | 3 + .../50_major_decision_values.txt | 4 + common/script_values/50_tribal_values.txt | 13 +- .../script_values/99_casus_belli_values.txt | 109 + common/script_values/99_chancellor_values.txt | 26 +- .../99_court_chaplain_values.txt | 110 +- common/script_values/99_kurultai_values.txt | 303 + common/script_values/99_marshal_values.txt | 17 + common/script_values/99_steward_values.txt | 58 +- .../00_activity_triggers.txt | 664 + .../00_adultery_triggers.txt | 129 + .../00_ai_acceptance_triggers.txt | 19 + .../00_ai_value_triggers.txt | 291 + .../00_artifact_triggers.txt | 2234 ++++ .../00_auto_character_triggers.txt | 17 + .../00_available_for_events_triggers.txt | 36 +- .../scripted_triggers/00_bastard_triggers.txt | 220 + .../scripted_triggers/00_birth_triggers.txt | 59 + .../00_board_game_scripted_triggers.txt | 76 + .../00_building_requirement_triggers.txt | 789 ++ .../00_childhood_triggers.txt | 362 + common/scripted_triggers/00_clan_triggers.txt | 26 + .../00_clothing_triggers.txt | 218 +- common/scripted_triggers/00_coa_triggers.txt | 364 + .../00_commander_triggers.txt | 62 + .../00_compliment_triggers.txt | 22 + .../00_councillor_triggers.txt | 1179 ++ .../00_county_corruption_triggers.txt | 47 + .../00_court_position_triggers.txt | 1682 +++ .../00_court_role_triggers.txt | 92 + .../00_court_scheme_triggers.txt | 6 + .../00_courtier_guest_management_triggers.txt | 829 ++ .../scripted_triggers/00_crime_triggers.txt | 68 + .../00_crypto_religionist_triggers.txt | 16 + .../00_cultural_heritage_triggers.txt | 185 + .../00_cultural_triggers.txt | 586 + .../00_death_management_triggers.txt | 97 + .../00_diarchy_scripted_triggers.txt | 870 ++ .../00_distance_triggers.txt | 23 + .../scripted_triggers/00_dynasty_triggers.txt | 119 + .../00_economic_triggers.txt | 99 + .../00_education_triggers.txt | 453 + .../00_elective_triggers.txt | 339 + .../scripted_triggers/00_faction_triggers.txt | 159 + .../scripted_triggers/00_family_triggers.txt | 336 + .../00_feast_activity_triggers.txt | 66 + .../00_food_scripted_triggers.txt | 56 + .../00_funeral_and_body_disposal_triggers.txt | 42 + .../00_game_rule_triggers.txt | 281 + .../00_general_trait_triggers.txt | 1236 ++ .../00_generic_event_sensibility_triggers.txt | 259 + .../00_generic_struggle_scripted_triggers.txt | 508 + .../00_government_triggers.txt | 70 + .../00_great_holy_war_triggers.txt | 134 + .../00_has_dlc_scripted_triggers.txt | 89 + common/scripted_triggers/00_hunt_triggers.txt | 1074 ++ .../00_illustration_triggers.txt | 619 + .../00_interaction_triggers.txt | 6 +- .../scripted_triggers/00_journey_triggers.txt | 112 + .../scripted_triggers/00_laamp_triggers.txt | 935 ++ common/scripted_triggers/00_law_triggers.txt | 127 +- .../scripted_triggers/00_legal_triggers.txt | 129 + .../00_lifestyle_perk_triggers.txt | 87 + .../00_lifestyle_triggers.txt | 413 + .../00_major_decision_triggers.txt | 226 + .../00_marriage_triggers.txt | 612 + .../00_military_triggers.txt | 30 + .../00_opinion_scripted_triggers.txt | 338 + .../00_personality_trait_triggers.txt | 192 + .../00_personality_triggers.txt | 245 + common/scripted_triggers/00_pet_triggers.txt | 116 + .../00_physical_appearance_triggers.txt | 41 + .../00_pilgrimage_triggers.txt | 115 + .../00_playdate_activity_triggers.txt | 16 + .../00_province_triggers.txt | 3 + .../00_relation_triggers.txt | 1191 ++ .../00_religious_triggers.txt | 78 +- .../00_rich_presence_triggers.txt | 18 + .../00_roaming_activity_triggers.txt | 88 + .../00_romance_and_seduction_triggers.txt | 768 ++ .../00_scheme_befriend_triggers.txt | 52 + .../scripted_triggers/00_scheme_triggers.txt | 931 ++ .../00_scripted_rule_triggers.txt | 134 + .../00_scripted_triggers.txt | 9 +- .../scripted_triggers/00_secret_triggers.txt | 595 + .../00_secret_type_triggers.txt | 7 +- .../scripted_triggers/00_sibling_triggers.txt | 18 + .../00_single_combat_scripted_triggers.txt | 79 + .../00_statecraft_lifestyle_triggers.txt | 11 + .../scripted_triggers/00_stress_triggers.txt | 321 + .../00_succession_triggers.txt | 7 +- .../00_task_contract_triggers.txt | 268 + .../scripted_triggers/00_terrain_triggers.txt | 87 + .../scripted_triggers/00_title_triggers.txt | 159 + .../scripted_triggers/00_travel_triggers.txt | 256 + .../00_tutorial_triggers.txt | 16 + .../00_vassal_stance_triggers.txt | 5 +- .../00_war_and_peace_triggers.txt | 130 +- .../scripted_triggers/00_weather_triggers.txt | 465 + .../scripted_triggers/00_witch_triggers.txt | 24 + .../01_bp1_filippa_scripted_triggers.txt | 41 + .../01_building_upgrade_triggers.txt | 26 + .../01_fp1_scripted_triggers.txt | 360 + .../02_ep1_scripted_triggers.txt | 400 + .../03_bp1_scripted_triggers.txt | 315 + .../03_bp2_scripted_triggers.txt | 81 + .../03_fp2_scripted_triggers.txt | 744 ++ .../04_ep2_accolade_triggers.txt | 9 + .../04_ep2_tour_triggers.txt | 79 + .../04_ep2_tournament_triggers.txt | 537 + .../04_ep2_wedding_triggers.txt | 40 + .../05_bp2_hostage_triggers.txt | 307 + .../05_bp2_scripted_triggers.txt | 55 + common/scripted_triggers/05_bp2_triggers.txt | 87 + common/scripted_triggers/06_bp3_triggers.txt | 218 + .../06_ce1_epidemic_triggers.txt | 43 + .../06_ce1_legend_triggers.txt | 116 + .../06_ce1_legitimacy_triggers.txt | 30 + .../06_fp3_scripted_triggers.txt | 480 + .../07_ep3_petition_triggers.txt | 100 + common/scripted_triggers/07_ep3_triggers.txt | 98 +- .../07_frankokratia_triggers.txt | 720 ++ common/scripted_triggers/08_bp3_triggers.txt | 3 + .../09_mpo_greatest_of_khans_triggers.txt | 480 + .../09_mpo_settlement_issue_triggers.txt | 57 + .../20_health_balancing_triggers.txt | 67 + .../scripted_triggers/20_health_triggers.txt | 865 ++ .../mpo_scripted_triggers.txt | 1878 +++ .../contracts/_subject_contracts.info | 90 + .../contracts}/administrative.txt | 65 +- common/subject_contracts/contracts/clan.txt | 89 + .../contracts/default_tributary.txt | 139 + .../contracts}/feudal.txt | 90 +- common/subject_contracts/contracts/herder.txt | 12 + common/subject_contracts/contracts/nomad.txt | 291 + .../contracts}/republic.txt | 4 +- .../contracts}/special_contracts.txt | 299 +- .../contracts}/theocratic.txt | 6 +- .../contracts}/tribal.txt | 0 .../groups/_subject_contract_groups.info | 52 + .../groups/subject_contract_groups.txt | 118 + .../01_princely_elective.txt | 2 +- common/traits/00_traits.txt | 1800 ++- common/traits/_traits.info | 6 +- .../vassal_contracts/_vassal_contracts.info | 77 - common/vassal_contracts/clan.txt | 25 - gfx/map/borders/settings.txt | 8 + gfx/map/map_modes/map_modes.txt | 584 + .../generated/tree_pine_01_a_generator_1.txt | 138 +- .../special_building_locators.txt | 350 +- gfx/map/table_styles/table_styles.txt | 17 +- 349 files changed, 78627 insertions(+), 7804 deletions(-) create mode 100644 common/bookmark_portraits/historical_export_easteregg_alexander_windahl.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_anton_holmqvist.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_anton_sorokin.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_artur_kacprzak.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_bahar_shefket.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_bianca_savazzi.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_celine_jensen.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_christian_daflos.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_claudia_baldassi.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_daan_broekhof.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_daniel_moore.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_david_drake.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_debbie_lane.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_elena_zenko.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_elisabeth_gangenes.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_fabian_franzen.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_fei_berg_hulthen.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_hanna_lohman.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_hugo_cortell.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_ismael_serrano.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_jacopo_freddi.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_jakob_jorstedt.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_jakub_potapczyk.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_james_beaumont.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_joacim_carlberg.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_johanna_hermansson.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_johanna_uddstahl.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_katya_boestad.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_linda_tiger.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_linnea_thimren.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_lucas_ribeiro.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_lysann_schlegel.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_malin_jonsson.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_mathilda_bjarnehed.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_matthew_clohessy.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_max_weltz.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_maximilian_olbers.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_milla_lankinen.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_nicholas_meredith.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_nikolaos_kaltsogiannis.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_ola_jentzsch.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_olof_bjork.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_oscar_andersson.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_paul_depre.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_peter_johannesson.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_petter_vilberg.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_pontus_olofsson.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_samet_atasoy.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_sandra_runge_moller.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_sean_hughes.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_steacy_mcilwham.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_stina_arvidsson_radestig.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_tegan_harris.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_tess_lindholm.txt create mode 100644 common/bookmark_portraits/historical_export_easteregg_veronica_pazos.txt delete mode 100644 common/bookmark_portraits/historical_export_easteregg_zack_holmgren.txt create mode 100644 common/buildings/00_admin_buildings.txt create mode 100644 common/buildings/00_nomad_buildings.txt create mode 100644 common/buildings/ccp3_special_buildings.txt create mode 100644 common/character_interactions/00_tributary_interactions.txt create mode 100644 common/character_interactions/09_mpo_interactions.txt create mode 100644 common/customizable_localization/00_character_interaction_categories.txt create mode 100644 common/customizable_localization/09_mpo_custom_loc.txt create mode 100644 common/customizable_localization/09_mpo_custom_loc_2.txt create mode 100644 common/men_at_arms_types/00_cultural_maa_types.txt create mode 100644 common/men_at_arms_types/00_fp3_maa_types.txt create mode 100644 common/men_at_arms_types/00_holy_order_maa_types.txt create mode 100644 common/men_at_arms_types/00_regional_maa_types.txt create mode 100644 common/men_at_arms_types/01_accolade_maa_types.txt create mode 100644 common/men_at_arms_types/01_fp1_maa_types.txt create mode 100644 common/men_at_arms_types/07_ep3_maa_types.txt create mode 100644 common/men_at_arms_types/09_mpo_maa_types.txt create mode 100644 common/men_at_arms_types/_men_at_arms_types.info create mode 100644 common/script_values/00_county_fertility.txt create mode 100644 common/script_values/09_mpo_domicile_values.txt create mode 100644 common/script_values/09_mpo_the_great_steppe_values.txt create mode 100644 common/script_values/09_mpo_values.txt create mode 100644 common/script_values/99_kurultai_values.txt create mode 100644 common/scripted_triggers/00_activity_triggers.txt create mode 100644 common/scripted_triggers/00_adultery_triggers.txt create mode 100644 common/scripted_triggers/00_ai_acceptance_triggers.txt create mode 100644 common/scripted_triggers/00_ai_value_triggers.txt create mode 100644 common/scripted_triggers/00_artifact_triggers.txt create mode 100644 common/scripted_triggers/00_auto_character_triggers.txt create mode 100644 common/scripted_triggers/00_bastard_triggers.txt create mode 100644 common/scripted_triggers/00_birth_triggers.txt create mode 100644 common/scripted_triggers/00_board_game_scripted_triggers.txt create mode 100644 common/scripted_triggers/00_building_requirement_triggers.txt create mode 100644 common/scripted_triggers/00_childhood_triggers.txt create mode 100644 common/scripted_triggers/00_clan_triggers.txt create mode 100644 common/scripted_triggers/00_coa_triggers.txt create mode 100644 common/scripted_triggers/00_commander_triggers.txt create mode 100644 common/scripted_triggers/00_compliment_triggers.txt create mode 100644 common/scripted_triggers/00_councillor_triggers.txt create mode 100644 common/scripted_triggers/00_county_corruption_triggers.txt create mode 100644 common/scripted_triggers/00_court_position_triggers.txt create mode 100644 common/scripted_triggers/00_court_role_triggers.txt create mode 100644 common/scripted_triggers/00_court_scheme_triggers.txt create mode 100644 common/scripted_triggers/00_courtier_guest_management_triggers.txt create mode 100644 common/scripted_triggers/00_crime_triggers.txt create mode 100644 common/scripted_triggers/00_crypto_religionist_triggers.txt create mode 100644 common/scripted_triggers/00_cultural_heritage_triggers.txt create mode 100644 common/scripted_triggers/00_cultural_triggers.txt create mode 100644 common/scripted_triggers/00_death_management_triggers.txt create mode 100644 common/scripted_triggers/00_diarchy_scripted_triggers.txt create mode 100644 common/scripted_triggers/00_distance_triggers.txt create mode 100644 common/scripted_triggers/00_dynasty_triggers.txt create mode 100644 common/scripted_triggers/00_economic_triggers.txt create mode 100644 common/scripted_triggers/00_education_triggers.txt create mode 100644 common/scripted_triggers/00_elective_triggers.txt create mode 100644 common/scripted_triggers/00_faction_triggers.txt create mode 100644 common/scripted_triggers/00_family_triggers.txt create mode 100644 common/scripted_triggers/00_feast_activity_triggers.txt create mode 100644 common/scripted_triggers/00_food_scripted_triggers.txt create mode 100644 common/scripted_triggers/00_funeral_and_body_disposal_triggers.txt create mode 100644 common/scripted_triggers/00_game_rule_triggers.txt create mode 100644 common/scripted_triggers/00_general_trait_triggers.txt create mode 100644 common/scripted_triggers/00_generic_event_sensibility_triggers.txt create mode 100644 common/scripted_triggers/00_generic_struggle_scripted_triggers.txt create mode 100644 common/scripted_triggers/00_government_triggers.txt create mode 100644 common/scripted_triggers/00_great_holy_war_triggers.txt create mode 100644 common/scripted_triggers/00_has_dlc_scripted_triggers.txt create mode 100644 common/scripted_triggers/00_hunt_triggers.txt create mode 100644 common/scripted_triggers/00_illustration_triggers.txt create mode 100644 common/scripted_triggers/00_journey_triggers.txt create mode 100644 common/scripted_triggers/00_laamp_triggers.txt create mode 100644 common/scripted_triggers/00_legal_triggers.txt create mode 100644 common/scripted_triggers/00_lifestyle_perk_triggers.txt create mode 100644 common/scripted_triggers/00_lifestyle_triggers.txt create mode 100644 common/scripted_triggers/00_major_decision_triggers.txt create mode 100644 common/scripted_triggers/00_marriage_triggers.txt create mode 100644 common/scripted_triggers/00_military_triggers.txt create mode 100644 common/scripted_triggers/00_opinion_scripted_triggers.txt create mode 100644 common/scripted_triggers/00_personality_trait_triggers.txt create mode 100644 common/scripted_triggers/00_personality_triggers.txt create mode 100644 common/scripted_triggers/00_pet_triggers.txt create mode 100644 common/scripted_triggers/00_physical_appearance_triggers.txt create mode 100644 common/scripted_triggers/00_pilgrimage_triggers.txt create mode 100644 common/scripted_triggers/00_playdate_activity_triggers.txt create mode 100644 common/scripted_triggers/00_province_triggers.txt create mode 100644 common/scripted_triggers/00_relation_triggers.txt create mode 100644 common/scripted_triggers/00_rich_presence_triggers.txt create mode 100644 common/scripted_triggers/00_roaming_activity_triggers.txt create mode 100644 common/scripted_triggers/00_romance_and_seduction_triggers.txt create mode 100644 common/scripted_triggers/00_scheme_befriend_triggers.txt create mode 100644 common/scripted_triggers/00_scheme_triggers.txt create mode 100644 common/scripted_triggers/00_scripted_rule_triggers.txt create mode 100644 common/scripted_triggers/00_secret_triggers.txt create mode 100644 common/scripted_triggers/00_sibling_triggers.txt create mode 100644 common/scripted_triggers/00_single_combat_scripted_triggers.txt create mode 100644 common/scripted_triggers/00_statecraft_lifestyle_triggers.txt create mode 100644 common/scripted_triggers/00_stress_triggers.txt create mode 100644 common/scripted_triggers/00_task_contract_triggers.txt create mode 100644 common/scripted_triggers/00_terrain_triggers.txt create mode 100644 common/scripted_triggers/00_title_triggers.txt create mode 100644 common/scripted_triggers/00_travel_triggers.txt create mode 100644 common/scripted_triggers/00_tutorial_triggers.txt create mode 100644 common/scripted_triggers/00_weather_triggers.txt create mode 100644 common/scripted_triggers/00_witch_triggers.txt create mode 100644 common/scripted_triggers/01_bp1_filippa_scripted_triggers.txt create mode 100644 common/scripted_triggers/01_building_upgrade_triggers.txt create mode 100644 common/scripted_triggers/01_fp1_scripted_triggers.txt create mode 100644 common/scripted_triggers/02_ep1_scripted_triggers.txt create mode 100644 common/scripted_triggers/03_bp1_scripted_triggers.txt create mode 100644 common/scripted_triggers/03_bp2_scripted_triggers.txt create mode 100644 common/scripted_triggers/03_fp2_scripted_triggers.txt create mode 100644 common/scripted_triggers/04_ep2_accolade_triggers.txt create mode 100644 common/scripted_triggers/04_ep2_tour_triggers.txt create mode 100644 common/scripted_triggers/04_ep2_tournament_triggers.txt create mode 100644 common/scripted_triggers/04_ep2_wedding_triggers.txt create mode 100644 common/scripted_triggers/05_bp2_hostage_triggers.txt create mode 100644 common/scripted_triggers/05_bp2_scripted_triggers.txt create mode 100644 common/scripted_triggers/05_bp2_triggers.txt create mode 100644 common/scripted_triggers/06_bp3_triggers.txt create mode 100644 common/scripted_triggers/06_ce1_epidemic_triggers.txt create mode 100644 common/scripted_triggers/06_ce1_legend_triggers.txt create mode 100644 common/scripted_triggers/06_ce1_legitimacy_triggers.txt create mode 100644 common/scripted_triggers/06_fp3_scripted_triggers.txt create mode 100644 common/scripted_triggers/07_ep3_petition_triggers.txt create mode 100644 common/scripted_triggers/07_frankokratia_triggers.txt create mode 100644 common/scripted_triggers/08_bp3_triggers.txt create mode 100644 common/scripted_triggers/09_mpo_greatest_of_khans_triggers.txt create mode 100644 common/scripted_triggers/09_mpo_settlement_issue_triggers.txt create mode 100644 common/scripted_triggers/20_health_balancing_triggers.txt create mode 100644 common/scripted_triggers/20_health_triggers.txt create mode 100644 common/scripted_triggers/mpo_scripted_triggers.txt create mode 100644 common/subject_contracts/contracts/_subject_contracts.info rename common/{vassal_contracts => subject_contracts/contracts}/administrative.txt (87%) create mode 100644 common/subject_contracts/contracts/clan.txt create mode 100644 common/subject_contracts/contracts/default_tributary.txt rename common/{vassal_contracts => subject_contracts/contracts}/feudal.txt (71%) create mode 100644 common/subject_contracts/contracts/herder.txt create mode 100644 common/subject_contracts/contracts/nomad.txt rename common/{vassal_contracts => subject_contracts/contracts}/republic.txt (98%) rename common/{vassal_contracts => subject_contracts/contracts}/special_contracts.txt (68%) rename common/{vassal_contracts => subject_contracts/contracts}/theocratic.txt (77%) rename common/{vassal_contracts => subject_contracts/contracts}/tribal.txt (100%) create mode 100644 common/subject_contracts/groups/_subject_contract_groups.info create mode 100644 common/subject_contracts/groups/subject_contract_groups.txt delete mode 100644 common/vassal_contracts/_vassal_contracts.info delete mode 100644 common/vassal_contracts/clan.txt diff --git a/common/bookmark_portraits/historical_export_easteregg_alexander_windahl.txt b/common/bookmark_portraits/historical_export_easteregg_alexander_windahl.txt new file mode 100644 index 00000000..8845cb63 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_alexander_windahl.txt @@ -0,0 +1,148 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_alexander_windahl +historical_export_easteregg_alexander_windahl={ + type=male + id=20062 + random_seed=2539492642 + age=0.260000 + genes={ hair_color={ 12 85 77 78 } + skin_color={ 38 31 7 93 } + eye_color={ 198 137 198 199 } + gene_chin_forward={ "chin_forward_neg" 106 "chin_forward_neg" 108 } + gene_chin_height={ "chin_height_neg" 143 "chin_height_neg" 120 } + gene_chin_width={ "chin_width_neg" 157 "chin_width_neg" 122 } + gene_eye_angle={ "eye_angle_neg" 107 "eye_angle_neg" 121 } + gene_eye_depth={ "eye_depth_neg" 89 "eye_depth_neg" 126 } + gene_eye_height={ "eye_height_neg" 140 "eye_height_neg" 127 } + gene_eye_distance={ "eye_distance_neg" 133 "eye_distance_neg" 125 } + gene_eye_shut={ "eye_shut_neg" 126 "eye_shut_neg" 126 } + gene_forehead_angle={ "forehead_angle_pos" 158 "forehead_angle_pos" 135 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 121 "forehead_brow_height_neg" 122 } + gene_forehead_roundness={ "forehead_roundness_pos" 131 "forehead_roundness_pos" 153 } + gene_forehead_width={ "forehead_width_pos" 197 "forehead_width_pos" 145 } + gene_forehead_height={ "forehead_height_neg" 255 "forehead_height_neg" 43 } + gene_head_height={ "head_height_neg" 161 "head_height_neg" 85 } + gene_head_width={ "head_width_pos" 198 "head_width_pos" 168 } + gene_head_profile={ "head_profile_pos" 167 "head_profile_pos" 130 } + gene_head_top_height={ "head_top_height_neg" 137 "head_top_height_neg" 91 } + gene_head_top_width={ "head_top_width_pos" 88 "head_top_width_pos" 216 } + gene_jaw_angle={ "jaw_angle_neg" 100 "jaw_angle_neg" 117 } + gene_jaw_forward={ "jaw_forward_pos" 92 "jaw_forward_pos" 135 } + gene_jaw_height={ "jaw_height_pos" 90 "jaw_height_pos" 137 } + gene_jaw_width={ "jaw_width_pos" 158 "jaw_width_pos" 167 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 139 "mouth_corner_depth_pos" 139 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 134 "mouth_corner_height_pos" 134 } + gene_mouth_forward={ "mouth_forward_neg" 135 "mouth_forward_neg" 120 } + gene_mouth_height={ "mouth_height_pos" 108 "mouth_height_pos" 142 } + gene_mouth_width={ "mouth_width_neg" 98 "mouth_width_neg" 98 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 67 "mouth_upper_lip_size_neg" 98 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 79 "mouth_lower_lip_size_pos" 129 } + gene_mouth_open={ "mouth_open_neg" 0 "mouth_open_neg" 73 } + gene_neck_length={ "neck_length_neg" 149 "neck_length_neg" 123 } + gene_neck_width={ "neck_width_neg" 179 "neck_width_neg" 111 } + gene_bs_cheek_forward={ "cheek_forward_pos" 133 "cheek_forward_pos" 20 } + gene_bs_cheek_height={ "cheek_height_pos" 55 "cheek_height_pos" 8 } + gene_bs_cheek_width={ "cheek_width_pos" 43 "cheek_width_neg" 4 } + gene_bs_ear_angle={ "ear_angle_neg" 55 "ear_angle_pos" 186 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 126 "ear_inner_shape_pos" 126 } + gene_bs_ear_bend={ "ear_upper_bend_pos" 70 "ear_upper_bend_pos" 134 } + gene_bs_ear_outward={ "ear_outward_neg" 59 "ear_outward_neg" 59 } + gene_bs_ear_size={ "ear_size_neg" 84 "ear_size_neg" 84 } + gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 107 "eye_corner_depth_pos" 233 } + gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 255 "eye_fold_shape_pos" 28 } + gene_bs_eye_size={ "eye_size_pos" 45 "eye_size_pos" 9 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 25 "eye_upper_lid_size_neg" 49 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 3 "forehead_brow_curve_neg" 60 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 91 "forehead_brow_forward_neg" 8 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 102 "forehead_brow_inner_height_neg" 36 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 179 "forehead_brow_outer_height_pos" 25 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 235 "forehead_brow_width_neg" 44 } + gene_bs_jaw_def={ "jaw_def_neg" 91 "jaw_def_neg" 97 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 86 "mouth_lower_lip_def_pos" 14 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 2 "mouth_lower_lip_full_pos" 2 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_neg" 0 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 171 "mouth_lower_lip_width_pos" 25 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 150 "mouth_philtrum_def_pos" 29 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 92 "mouth_philtrum_shape_neg" 92 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 65 "mouth_philtrum_width_neg" 45 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 68 "mouth_upper_lip_def_pos" 68 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 38 "mouth_upper_lip_full_pos" 38 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 41 "mouth_upper_lip_profile_pos" 41 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 191 "mouth_upper_lip_width_neg" 56 } + gene_bs_nose_forward={ "nose_forward_pos" 105 "nose_forward_neg" 20 } + gene_bs_nose_height={ "nose_height_neg" 118 "nose_height_neg" 118 } + gene_bs_nose_length={ "nose_length_neg" 68 "nose_length_neg" 68 } + gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 43 "nose_nostril_height_neg" 70 } + gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 51 "nose_nostril_width_pos" 4 } + gene_bs_nose_profile={ "nose_profile_neg" 34 "nose_profile_neg" 34 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 135 "nose_ridge_angle_pos" 26 } + gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 33 "nose_ridge_width_pos" 76 } + gene_bs_nose_size={ "nose_size_neg" 103 "nose_size_pos" 11 } + gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 113 "nose_tip_angle_pos" 88 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 23 "nose_tip_forward_pos" 33 } + gene_bs_nose_tip_width={ "nose_tip_width_neg" 55 "nose_tip_width_pos" 45 } + face_detail_cheek_def={ "cheek_def_02" 0 "cheek_def_01" 57 } + face_detail_cheek_fat={ "cheek_fat_01_pos" 255 "cheek_fat_01_neg" 82 } + face_detail_chin_cleft={ "chin_cleft" 81 "chin_cleft" 8 } + face_detail_chin_def={ "chin_def_neg" 28 "chin_def" 227 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 89 "eye_lower_lid_def" 89 } + face_detail_eye_socket={ "eye_socket_color_02" 255 "eye_socket_color_03" 198 } + face_detail_nasolabial={ "nasolabial_03" 255 "nasolabial_03" 5 } + face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 121 } + face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 230 } + face_detail_temple_def={ "temple_def" 0 "temple_def" 254 } + expression_brow_wrinkles={ "brow_wrinkles_04" 255 "brow_wrinkles_04" 176 } + expression_eye_wrinkles={ "eye_wrinkles_02" 252 "eye_wrinkles_02" 131 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 223 "forehead_wrinkles_01" 223 } + expression_other={ "cheek_wrinkles_both_01" 37 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_6" 150 "complexion_4" 155 } + gene_height={ "normal_height" 177 "normal_height" 118 } + gene_bs_body_type={ "body_fat_head_fat_full" 151 "body_fat_head_fat_medium" 102 } + gene_bs_body_shape={ "body_shape_rectangle_full" 51 "body_shape_rectangle_full" 41 } + gene_bs_bust={ "bust_clothes" 57 "bust_default" 77 } + gene_age={ "old_2" 177 "old_2" 177 } + gene_eyebrows_shape={ "avg_spacing_low_thickness" 151 "avg_spacing_low_thickness" 151 } + gene_eyebrows_fullness={ "layer_2_avg_thickness" 87 "layer_2_avg_thickness" 91 } + gene_body_hair={ "body_hair_avg" 114 "body_hair_avg" 114 } + gene_hair_type={ "hair_wavy" 172 "hair_wavy" 172 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 253 "normal_eyes" 253 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 97 "normal_eyelashes" 97 } + special_headgear_spectacles={ "blindfold" 127 "no_spectacles" 0 } + beards={ "no_beard" 28 "no_beard" 0 } + cloaks={ "ep2_cloak_western_era1_low_nobility" 218 "no_cloak" 0 } + hairstyles={ "scripted_character_hairstyles_01" 196 "all_hairstyles" 0 } + legwear={ "pol_common_legwear" 156 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "pol_commoner_clothes" 223 "most_clothes" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 2268070609 2268070609 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_anton_holmqvist.txt b/common/bookmark_portraits/historical_export_easteregg_anton_holmqvist.txt new file mode 100644 index 00000000..4d7ce0e3 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_anton_holmqvist.txt @@ -0,0 +1,151 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_anton_holmqvist +historical_export_easteregg_anton_holmqvist={ + type=male + id=19220 + random_seed=1517228877 + age=0.300000 + genes={ hair_color={ 203 138 165 128 } + skin_color={ 75 51 38 63 } + eye_color={ 60 132 132 169 } + gene_chin_forward={ "chin_forward_neg" 117 "chin_forward_neg" 117 } + gene_chin_height={ "chin_height_neg" 126 "chin_height_neg" 126 } + gene_chin_width={ "chin_width_neg" 153 "chin_width_neg" 124 } + gene_eye_angle={ "eye_angle_neg" 120 "eye_angle_neg" 119 } + gene_eye_depth={ "eye_depth_neg" 139 "eye_depth_neg" 117 } + gene_eye_height={ "eye_height_neg" 131 "eye_height_neg" 118 } + gene_eye_distance={ "eye_distance_neg" 128 "eye_distance_neg" 121 } + gene_eye_shut={ "eye_shut_neg" 148 "eye_shut_neg" 102 } + gene_forehead_angle={ "forehead_angle_neg" 126 "forehead_angle_neg" 102 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 123 "forehead_brow_height_neg" 118 } + gene_forehead_roundness={ "forehead_roundness_pos" 127 "forehead_roundness_pos" 138 } + gene_forehead_width={ "forehead_width_pos" 128 "forehead_width_pos" 151 } + gene_forehead_height={ "forehead_height_neg" 123 "forehead_height_neg" 121 } + gene_head_height={ "head_height_neg" 120 "head_height_neg" 104 } + gene_head_width={ "head_width_neg" 102 "head_width_neg" 92 } + gene_head_profile={ "head_profile_pos" 123 "head_profile_pos" 135 } + gene_head_top_height={ "head_top_height_pos" 125 "head_top_height_pos" 132 } + gene_head_top_width={ "head_top_width_pos" 150 "head_top_width_pos" 141 } + gene_jaw_angle={ "jaw_angle_neg" 134 "jaw_angle_neg" 96 } + gene_jaw_forward={ "jaw_forward_neg" 123 "jaw_forward_neg" 123 } + gene_jaw_height={ "jaw_height_pos" 129 "jaw_height_pos" 139 } + gene_jaw_width={ "jaw_width_pos" 164 "jaw_width_pos" 205 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 130 } + gene_mouth_corner_height={ "mouth_corner_height_neg" 110 "mouth_corner_height_neg" 120 } + gene_mouth_forward={ "mouth_forward_pos" 137 "mouth_forward_pos" 137 } + gene_mouth_height={ "mouth_height_pos" 125 "mouth_height_pos" 136 } + gene_mouth_width={ "mouth_width_pos" 179 "mouth_width_pos" 165 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 117 "mouth_upper_lip_size_neg" 92 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 110 "mouth_lower_lip_size_neg" 111 } + gene_mouth_open={ "mouth_open_neg" 0 "mouth_open_neg" 123 } + gene_neck_length={ "neck_length_neg" 128 "neck_length_neg" 112 } + gene_neck_width={ "neck_width_pos" 209 "neck_width_pos" 132 } + gene_bs_cheek_forward={ "cheek_forward_neg" 22 "cheek_forward_neg" 22 } + gene_bs_cheek_height={ "cheek_height_neg" 21 "cheek_height_neg" 21 } + gene_bs_cheek_width={ "cheek_width_pos" 37 "cheek_width_neg" 17 } + gene_bs_ear_angle={ "ear_angle_neg" 45 "ear_angle_pos" 37 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 120 "ear_inner_shape_pos" 185 } + gene_bs_ear_bend={ "ear_lower_bend_pos" 50 "ear_lower_bend_pos" 94 } + gene_bs_ear_outward={ "ear_outward_pos" 75 "ear_outward_pos" 50 } + gene_bs_ear_size={ "ear_size_pos" 183 "ear_size_pos" 21 } + gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 1 "eye_corner_depth_pos" 173 } + gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 5 "eye_fold_shape_neg" 77 } + gene_bs_eye_size={ "eye_size_neg" 19 "eye_size_neg" 17 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 15 "eye_upper_lid_size_pos" 10 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 177 "forehead_brow_curve_pos" 11 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 45 "forehead_brow_forward_neg" 13 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 21 "forehead_brow_inner_height_neg" 76 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 23 "forehead_brow_outer_height_neg" 22 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 71 "forehead_brow_width_pos" 136 } + gene_bs_jaw_def={ "jaw_def_neg" 13 "jaw_def_neg" 10 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 125 "mouth_lower_lip_def_pos" 57 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 79 "mouth_lower_lip_full_neg" 19 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 3 "mouth_lower_lip_pad_pos" 86 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 27 "mouth_lower_lip_width_pos" 36 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 134 "mouth_philtrum_def_pos" 12 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 5 "mouth_philtrum_shape_neg" 5 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 25 "mouth_philtrum_width_neg" 25 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 201 "mouth_upper_lip_def_pos" 32 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 59 "mouth_upper_lip_full_pos" 38 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 197 "mouth_upper_lip_profile_pos" 204 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 17 "mouth_upper_lip_width_neg" 6 } + gene_bs_nose_forward={ "nose_forward_neg" 5 "nose_forward_pos" 80 } + gene_bs_nose_height={ "nose_height_neg" 5 "nose_height_pos" 61 } + gene_bs_nose_length={ "nose_length_pos" 71 "nose_length_pos" 28 } + gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 7 "nose_nostril_height_pos" 0 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 133 "nose_nostril_width_pos" 24 } + gene_bs_nose_profile={ "nose_profile_pos" 14 "nose_profile_pos" 14 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 57 "nose_ridge_angle_neg" 18 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 83 "nose_ridge_width_neg" 35 } + gene_bs_nose_size={ "nose_size_pos" 81 "nose_size_pos" 57 } + gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 9 "nose_tip_angle_neg" 96 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 7 "nose_tip_forward_pos" 16 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 91 "nose_tip_width_pos" 59 } + face_detail_cheek_def={ "cheek_def_01" 58 "cheek_def_02" 18 } + face_detail_cheek_fat={ "cheek_fat_01_pos" 81 "cheek_fat_04_pos" 81 } + face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 5 } + face_detail_chin_def={ "chin_def" 188 "chin_def" 155 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 164 "eye_lower_lid_def" 237 } + face_detail_eye_socket={ "eye_socket_color_01" 109 "eye_socket_color_02" 15 } + face_detail_nasolabial={ "nasolabial_01" 97 "nasolabial_02" 8 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 86 "nose_ridge_def_pos" 47 } + face_detail_nose_tip_def={ "nose_tip_def" 37 "nose_tip_def" 43 } + face_detail_temple_def={ "temple_def" 64 "temple_def" 91 } + expression_brow_wrinkles={ "brow_wrinkles_03" 238 "brow_wrinkles_03" 238 } + expression_eye_wrinkles={ "eye_wrinkles_02" 212 "eye_wrinkles_02" 146 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 37 "forehead_wrinkles_01" 37 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_1" 129 "complexion_7" 194 } + gene_height={ "normal_height" 142 "normal_height" 108 } + gene_bs_body_type={ "body_fat_head_fat_medium" 122 "body_fat_head_fat_low" 137 } + gene_bs_body_shape={ "body_shape_rectangle_full" 157 "body_shape_rectangle_full" 0 } + gene_bs_bust={ "bust_clothes" 51 "bust_shape_3_half" 80 } + gene_age={ "old_3" 230 "old_3" 230 } + gene_eyebrows_shape={ "avg_spacing_avg_thickness" 127 "avg_spacing_low_thickness" 121 } + gene_eyebrows_fullness={ "layer_2_avg_thickness" 239 "layer_2_low_thickness" 110 } + gene_body_hair={ "body_hair_avg" 161 "body_hair_avg" 161 } + gene_hair_type={ "hair_wavy" 123 "hair_wavy" 123 } + gene_baldness={ "male_pattern_baldness" 123 "male_pattern_baldness" 123 } + eye_accessory={ "normal_eyes" 5 "normal_eyes" 5 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 231 "normal_eyelashes" 231 } + beards={ "all_beards" 199 "no_beard" 0 } + cloaks={ "no_cloak" 95 "no_cloak" 0 } + hairstyles={ "no_hairstyles" 68 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 244 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "northern_commoner_clothes" 103 "most_clothes" 0 } + headgear={ "northern_common" 107 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 2697330347 2697330347 } + tags={ { + hash=1367985987 + invert=no + } + { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_anton_sorokin.txt b/common/bookmark_portraits/historical_export_easteregg_anton_sorokin.txt new file mode 100644 index 00000000..c8ddd1e5 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_anton_sorokin.txt @@ -0,0 +1,167 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_anton_sorokin +historical_export_easteregg_anton_sorokin={ + type=male + id=19010 + random_seed=3764119251 + age=0.320000 + genes={ hair_color={ 131 114 131 114 } + skin_color={ 81 69 81 69 } + eye_color={ 228 178 228 178 } + gene_chin_forward={ "chin_forward_pos" 139 "chin_forward_pos" 139 } + gene_chin_height={ "chin_height_neg" 122 "chin_height_neg" 122 } + gene_chin_width={ "chin_width_pos" 140 "chin_width_pos" 140 } + gene_eye_angle={ "eye_angle_pos" 134 "eye_angle_pos" 134 } + gene_eye_depth={ "eye_depth_neg" 121 "eye_depth_neg" 121 } + gene_eye_height={ "eye_height_neg" 90 "eye_height_neg" 90 } + gene_eye_distance={ "eye_distance_neg" 93 "eye_distance_neg" 93 } + gene_eye_shut={ "eye_shut_pos" 175 "eye_shut_pos" 175 } + gene_forehead_angle={ "forehead_angle_pos" 148 "forehead_angle_pos" 148 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 78 "forehead_brow_height_neg" 78 } + gene_forehead_roundness={ "forehead_roundness_pos" 177 "forehead_roundness_pos" 177 } + gene_forehead_width={ "forehead_width_neg" 95 "forehead_width_neg" 95 } + gene_forehead_height={ "forehead_height_neg" 110 "forehead_height_neg" 110 } + gene_head_height={ "head_height_neg" 118 "head_height_neg" 118 } + gene_head_width={ "head_width_neg" 122 "head_width_neg" 122 } + gene_head_profile={ "head_profile_neg" 118 "head_profile_neg" 118 } + gene_head_top_height={ "head_top_height_pos" 170 "head_top_height_pos" 170 } + gene_head_top_width={ "head_top_width_pos" 136 "head_top_width_pos" 136 } + gene_jaw_angle={ "jaw_angle_neg" 123 "jaw_angle_neg" 123 } + gene_jaw_forward={ "jaw_forward_pos" 139 "jaw_forward_pos" 139 } + gene_jaw_height={ "jaw_height_pos" 136 "jaw_height_pos" 136 } + gene_jaw_width={ "jaw_width_pos" 147 "jaw_width_pos" 147 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 139 "mouth_corner_depth_pos" 139 } + gene_mouth_corner_height={ "mouth_corner_height_neg" 122 "mouth_corner_height_neg" 122 } + gene_mouth_forward={ "mouth_forward_neg" 116 "mouth_forward_neg" 116 } + gene_mouth_height={ "mouth_height_pos" 129 "mouth_height_pos" 129 } + gene_mouth_width={ "mouth_width_pos" 165 "mouth_width_pos" 165 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 145 "mouth_upper_lip_size_pos" 145 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 80 "mouth_lower_lip_size_neg" 80 } + gene_mouth_open={ "mouth_open_neg" 95 "mouth_open_neg" 95 } + gene_neck_length={ "neck_length_pos" 131 "neck_length_pos" 131 } + gene_neck_width={ "neck_width_neg" 103 "neck_width_neg" 103 } + gene_bs_cheek_forward={ "cheek_forward_neg" 3 "cheek_forward_neg" 3 } + gene_bs_cheek_height={ "cheek_height_pos" 28 "cheek_height_pos" 28 } + gene_bs_cheek_width={ "cheek_width_pos" 25 "cheek_width_pos" 25 } + gene_bs_ear_angle={ "ear_angle_pos" 4 "ear_angle_pos" 4 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 64 "ear_inner_shape_pos" 64 } + gene_bs_ear_bend={ "ear_upper_bend_pos" 1 "ear_upper_bend_pos" 1 } + gene_bs_ear_outward={ "ear_outward_pos" 101 "ear_outward_pos" 101 } + gene_bs_ear_size={ "ear_size_neg" 0 "ear_size_neg" 0 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 255 "eye_corner_depth_pos" 255 } + gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 52 "eye_fold_shape_pos" 52 } + gene_bs_eye_size={ "eye_size_neg" 97 "eye_size_neg" 97 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 43 "eye_upper_lid_size_neg" 43 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 120 "forehead_brow_curve_neg" 120 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 94 "forehead_brow_forward_neg" 94 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 16 "forehead_brow_inner_height_neg" 16 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 36 "forehead_brow_outer_height_neg" 36 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 32 "forehead_brow_width_pos" 32 } + gene_bs_jaw_def={ "jaw_def_neg" 62 "jaw_def_neg" 62 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 126 "mouth_lower_lip_def_pos" 126 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 13 "mouth_lower_lip_full_pos" 13 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 145 "mouth_lower_lip_pad_pos" 145 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 102 "mouth_lower_lip_width_pos" 102 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 38 "mouth_philtrum_def_pos" 38 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 20 "mouth_philtrum_shape_pos" 20 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 24 "mouth_philtrum_width_neg" 24 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 54 "mouth_upper_lip_def_pos" 54 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 27 "mouth_upper_lip_full_neg" 27 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 166 "mouth_upper_lip_profile_pos" 166 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 88 "mouth_upper_lip_width_neg" 88 } + gene_bs_nose_forward={ "nose_forward_pos" 50 "nose_forward_pos" 50 } + gene_bs_nose_height={ "nose_height_neg" 91 "nose_height_neg" 91 } + gene_bs_nose_length={ "nose_length_pos" 66 "nose_length_pos" 66 } + gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 22 "nose_nostril_height_neg" 22 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 45 "nose_nostril_width_neg" 45 } + gene_bs_nose_profile={ "nose_profile_pos" 19 "nose_profile_pos" 19 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 5 "nose_ridge_angle_pos" 5 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 91 "nose_ridge_width_neg" 91 } + gene_bs_nose_size={ "nose_size_pos" 36 "nose_size_pos" 36 } + gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 8 "nose_tip_angle_neg" 8 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 31 "nose_tip_forward_pos" 31 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 173 "nose_tip_width_pos" 173 } + face_detail_cheek_def={ "cheek_def_02" 24 "cheek_def_02" 24 } + face_detail_cheek_fat={ "cheek_fat_01_pos" 147 "cheek_fat_01_pos" 147 } + face_detail_chin_cleft={ "chin_cleft" 120 "chin_cleft" 120 } + face_detail_chin_def={ "chin_def" 180 "chin_def" 180 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 186 "eye_lower_lid_def" 186 } + face_detail_eye_socket={ "eye_socket_03" 8 "eye_socket_03" 8 } + face_detail_nasolabial={ "nasolabial_03" 93 "nasolabial_03" 93 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 23 "nose_ridge_def_neg" 23 } + face_detail_nose_tip_def={ "nose_tip_def" 8 "nose_tip_def" 8 } + face_detail_temple_def={ "temple_def" 216 "temple_def" 216 } + expression_brow_wrinkles={ "brow_wrinkles_04" 222 "brow_wrinkles_04" 33 } + expression_eye_wrinkles={ "eye_wrinkles_01" 218 "eye_wrinkles_01" 218 } + expression_forehead_wrinkles={ "forehead_wrinkles_03" 130 "forehead_wrinkles_03" 130 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_6" 76 "complexion_6" 76 } + gene_height={ "normal_height" 160 "normal_height" 160 } + gene_bs_body_type={ "body_fat_head_fat_full" 108 "body_fat_head_fat_full" 140 } + gene_bs_body_shape={ "body_shape_average" 30 "body_shape_average" 0 } + gene_bs_bust={ "bust_clothes" 40 "bust_shape_3_full" 51 } + gene_age={ "old_2" 68 "old_2" 68 } + gene_eyebrows_shape={ "far_spacing_avg_thickness" 127 "far_spacing_avg_thickness" 127 } + gene_eyebrows_fullness={ "layer_2_avg_thickness" 69 "layer_2_avg_thickness" 69 } + gene_body_hair={ "body_hair_sparse" 171 "body_hair_sparse" 171 } + gene_hair_type={ "hair_straight" 111 "hair_straight" 111 } + gene_baldness={ "male_pattern_baldness" 90 "male_pattern_baldness" 90 } + eye_accessory={ "normal_eyes" 3 "normal_eyes" 3 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 102 "normal_eyelashes" 102 } + beards={ "northern_beards_straight" 206 "no_beard" 0 } + cloaks={ "no_cloak" 230 "no_cloak" 0 } + hairstyles={ "northern_hairstyles_straight" 80 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 64 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "northern_war_nobility_clothes" 126 "most_clothes" 0 } + headgear={ "northern_war" 126 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 1955045592 1955045592 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=2793867254 + invert=no + } + { + hash=75156179 + invert=no + } + { + hash=1921638387 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=3548283999 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=2842715111 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_artur_kacprzak.txt b/common/bookmark_portraits/historical_export_easteregg_artur_kacprzak.txt new file mode 100644 index 00000000..1efdcd8d --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_artur_kacprzak.txt @@ -0,0 +1,164 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_artur_kacprzak +historical_export_easteregg_artur_kacprzak={ + type=male + id=20645 + random_seed=190401034 + age=0.210000 + genes={ hair_color={ 66 223 178 186 } + skin_color={ 143 81 18 91 } + eye_color={ 76 200 244 190 } + gene_chin_forward={ "chin_forward_neg" 168 "chin_forward_neg" 127 } + gene_chin_height={ "chin_height_pos" 107 "chin_height_pos" 137 } + gene_chin_width={ "chin_width_pos" 152 "chin_width_pos" 137 } + gene_eye_angle={ "eye_angle_pos" 131 "eye_angle_pos" 131 } + gene_eye_depth={ "eye_depth_neg" 118 "eye_depth_neg" 105 } + gene_eye_height={ "eye_height_neg" 134 "eye_height_neg" 127 } + gene_eye_distance={ "eye_distance_neg" 118 "eye_distance_neg" 102 } + gene_eye_shut={ "eye_shut_pos" 185 "eye_shut_pos" 128 } + gene_forehead_angle={ "forehead_angle_neg" 166 "forehead_angle_neg" 123 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 115 "forehead_brow_height_neg" 115 } + gene_forehead_roundness={ "forehead_roundness_pos" 132 "forehead_roundness_pos" 132 } + gene_forehead_width={ "forehead_width_pos" 142 "forehead_width_pos" 142 } + gene_forehead_height={ "forehead_height_neg" 118 "forehead_height_neg" 118 } + gene_head_height={ "head_height_pos" 128 "head_height_pos" 144 } + gene_head_width={ "head_width_pos" 180 "head_width_pos" 162 } + gene_head_profile={ "head_profile_pos" 143 "head_profile_pos" 178 } + gene_head_top_height={ "head_top_height_neg" 111 "head_top_height_neg" 96 } + gene_head_top_width={ "head_top_width_neg" 137 "head_top_width_neg" 111 } + gene_jaw_angle={ "jaw_angle_pos" 126 "jaw_angle_pos" 134 } + gene_jaw_forward={ "jaw_forward_pos" 130 "jaw_forward_pos" 135 } + gene_jaw_height={ "jaw_height_neg" 128 "jaw_height_neg" 115 } + gene_jaw_width={ "jaw_width_neg" 137 "jaw_width_neg" 94 } + gene_mouth_corner_depth={ "mouth_corner_depth_neg" 102 "mouth_corner_depth_neg" 102 } + gene_mouth_corner_height={ "mouth_corner_height_neg" 118 "mouth_corner_height_neg" 118 } + gene_mouth_forward={ "mouth_forward_neg" 114 "mouth_forward_neg" 114 } + gene_mouth_height={ "mouth_height_neg" 127 "mouth_height_neg" 127 } + gene_mouth_width={ "mouth_width_neg" 102 "mouth_width_neg" 102 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 160 "mouth_upper_lip_size_pos" 160 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 80 "mouth_lower_lip_size_neg" 80 } + gene_mouth_open={ "mouth_open_neg" 81 "mouth_open_neg" 81 } + gene_neck_length={ "neck_length_pos" 96 "neck_length_pos" 151 } + gene_neck_width={ "neck_width_pos" 188 "neck_width_pos" 141 } + gene_bs_cheek_forward={ "cheek_forward_pos" 23 "cheek_forward_pos" 12 } + gene_bs_cheek_height={ "cheek_height_neg" 63 "cheek_height_neg" 38 } + gene_bs_cheek_width={ "cheek_width_neg" 67 "cheek_width_neg" 103 } + gene_bs_ear_angle={ "ear_angle_neg" 44 "ear_angle_neg" 44 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 24 "ear_inner_shape_pos" 24 } + gene_bs_ear_bend={ "ear_lower_bend_pos" 2 "ear_lower_bend_pos" 2 } + gene_bs_ear_outward={ "ear_outward_neg" 25 "ear_outward_neg" 25 } + gene_bs_ear_size={ "ear_size_pos" 114 "ear_size_pos" 114 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 55 "eye_corner_depth_pos" 252 } + gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 59 "eye_fold_shape_neg" 0 } + gene_bs_eye_size={ "eye_size_pos" 25 "eye_size_pos" 37 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 21 "eye_upper_lid_size_pos" 38 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 34 "forehead_brow_curve_neg" 34 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 100 "forehead_brow_forward_pos" 100 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 31 "forehead_brow_inner_height_neg" 31 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 42 "forehead_brow_outer_height_pos" 42 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 2 "forehead_brow_width_pos" 2 } + gene_bs_jaw_def={ "jaw_def_pos" 97 "jaw_def_neg" 7 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 43 "mouth_lower_lip_def_pos" 43 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 36 "mouth_lower_lip_full_pos" 36 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 34 "mouth_lower_lip_pad_neg" 34 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 10 "mouth_lower_lip_width_neg" 10 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 48 "mouth_philtrum_def_pos" 48 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 10 "mouth_philtrum_shape_neg" 10 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 9 "mouth_philtrum_width_pos" 9 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 18 "mouth_upper_lip_def_pos" 18 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 24 "mouth_upper_lip_full_pos" 24 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 14 "mouth_upper_lip_profile_pos" 14 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 33 "mouth_upper_lip_width_neg" 33 } + gene_bs_nose_forward={ "nose_forward_pos" 51 "nose_forward_pos" 7 } + gene_bs_nose_height={ "nose_height_pos" 13 "nose_height_neg" 23 } + gene_bs_nose_length={ "nose_length_neg" 61 "nose_length_pos" 3 } + gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 111 "nose_nostril_height_pos" 38 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 57 "nose_nostril_width_neg" 88 } + gene_bs_nose_profile={ "nose_profile_pos" 17 "nose_profile_pos" 46 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 81 "nose_ridge_angle_neg" 29 } + gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 139 "nose_ridge_width_pos" 44 } + gene_bs_nose_size={ "nose_size_pos" 69 "nose_size_pos" 26 } + gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 19 "nose_tip_angle_pos" 42 } + gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 40 "nose_tip_forward_neg" 40 } + gene_bs_nose_tip_width={ "nose_tip_width_neg" 77 "nose_tip_width_pos" 65 } + face_detail_cheek_def={ "cheek_def_02" 17 "cheek_def_02" 5 } + face_detail_cheek_fat={ "cheek_fat_04_pos" 101 "cheek_fat_04_pos" 203 } + face_detail_chin_cleft={ "chin_cleft" 79 "chin_cleft" 23 } + face_detail_chin_def={ "chin_def_neg" 249 "chin_def_neg" 249 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 45 "eye_lower_lid_def" 45 } + face_detail_eye_socket={ "eye_socket_02" 64 "eye_socket_02" 1 } + face_detail_nasolabial={ "nasolabial_03" 0 "nasolabial_03" 1 } + face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 10 } + face_detail_nose_tip_def={ "nose_tip_def" 234 "nose_tip_def" 234 } + face_detail_temple_def={ "temple_def" 75 "temple_def" 5 } + expression_brow_wrinkles={ "brow_wrinkles_02" 74 "brow_wrinkles_02" 74 } + expression_eye_wrinkles={ "eye_wrinkles_02" 255 "eye_wrinkles_02" 251 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 17 "forehead_wrinkles_01" 17 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_2" 0 "complexion_4" 159 } + gene_height={ "normal_height" 169 "normal_height" 115 } + gene_bs_body_type={ "body_fat_head_fat_full" 134 "body_fat_head_fat_full" 105 } + gene_bs_body_shape={ "body_shape_triangle_half" 132 "body_shape_triangle_half" 0 } + gene_bs_bust={ "bust_clothes" 121 "bust_shape_3_full" 190 } + gene_age={ "old_2" 120 "old_2" 120 } + gene_eyebrows_shape={ "avg_spacing_low_thickness" 205 "avg_spacing_low_thickness" 205 } + gene_eyebrows_fullness={ "layer_2_avg_thickness" 255 "layer_2_low_thickness" 127 } + gene_body_hair={ "body_hair_avg" 120 "body_hair_avg" 120 } + gene_hair_type={ "hair_wavy" 97 "hair_wavy" 97 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 119 "normal_eyes" 119 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 134 "normal_eyelashes" 134 } + beards={ "scripted_character_beards_01" 28 "no_beard" 0 } + cloaks={ "no_cloak" 196 "no_cloak" 0 } + hairstyles={ "scripted_character_hairstyles_01" 51 "all_hairstyles" 0 } + legwear={ "pol_common_legwear" 58 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "pol_commoner_clothes" 22 "most_clothes" 0 } + headgear={ "western_common" 238 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + gene_cloak={ "cloak_additive" 255 "cloak_additive" 0 } + } + entity={ 979141817 979141817 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=3672171019 + invert=no + } + { + hash=3954150519 + invert=no + } + { + hash=1921638387 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=1219709797 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_bahar_shefket.txt b/common/bookmark_portraits/historical_export_easteregg_bahar_shefket.txt deleted file mode 100644 index 71b7fb52..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_bahar_shefket.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_bahar_shefket -historical_export_easteregg_bahar_shefket={ - type=female - id=16600 - age=0.330000 - genes={ hair_color={ 234 128 76 232 } - skin_color={ 189 79 193 103 } - eye_color={ 25 178 25 178 } - gene_chin_forward={ "chin_forward_pos" 62 "chin_forward_pos" 128 } - gene_chin_height={ "chin_height_neg" 109 "chin_height_neg" 125 } - gene_chin_width={ "chin_width_pos" 131 "chin_width_pos" 140 } - gene_eye_angle={ "eye_angle_neg" 115 "eye_angle_neg" 115 } - gene_eye_depth={ "eye_depth_pos" 134 "eye_depth_pos" 135 } - gene_eye_height={ "eye_height_pos" 123 "eye_height_pos" 129 } - gene_eye_distance={ "eye_distance_neg" 155 "eye_distance_neg" 112 } - gene_eye_shut={ "eye_shut_pos" 138 "eye_shut_pos" 138 } - gene_forehead_angle={ "forehead_angle_pos" 63 "forehead_angle_pos" 136 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 154 "forehead_brow_height_neg" 106 } - gene_forehead_roundness={ "forehead_roundness_neg" 168 "forehead_roundness_neg" 107 } - gene_forehead_width={ "forehead_width_neg" 194 "forehead_width_neg" 76 } - gene_forehead_height={ "forehead_height_pos" 199 "forehead_height_pos" 171 } - gene_head_height={ "head_height_pos" 136 "head_height_pos" 161 } - gene_head_width={ "head_width_pos" 171 "head_width_pos" 132 } - gene_head_profile={ "head_profile_pos" 122 "head_profile_pos" 150 } - gene_head_top_height={ "head_top_height_neg" 128 "head_top_height_neg" 105 } - gene_head_top_width={ "head_top_width_neg" 154 "head_top_width_neg" 105 } - gene_jaw_angle={ "jaw_angle_neg" 32 "jaw_angle_neg" 85 } - gene_jaw_forward={ "jaw_forward_pos" 92 "jaw_forward_pos" 140 } - gene_jaw_height={ "jaw_height_neg" 139 "jaw_height_neg" 124 } - gene_jaw_width={ "jaw_width_neg" 95 "jaw_width_neg" 113 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 131 "mouth_corner_depth_pos" 131 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 134 "mouth_corner_height_pos" 128 } - gene_mouth_forward={ "mouth_forward_neg" 101 "mouth_forward_neg" 100 } - gene_mouth_height={ "mouth_height_neg" 135 "mouth_height_neg" 115 } - gene_mouth_width={ "mouth_width_neg" 106 "mouth_width_neg" 122 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 144 "mouth_upper_lip_size_pos" 154 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 116 "mouth_lower_lip_size_neg" 123 } - gene_mouth_open={ "mouth_open_neg" 0 "mouth_open_neg" 121 } - gene_neck_length={ "neck_length_pos" 155 "neck_length_pos" 155 } - gene_neck_width={ "neck_width_neg" 0 "neck_width_neg" 118 } - gene_bs_cheek_forward={ "cheek_forward_pos" 19 "cheek_forward_pos" 24 } - gene_bs_cheek_height={ "cheek_height_neg" 67 "cheek_height_neg" 125 } - gene_bs_cheek_width={ "cheek_width_pos" 85 "cheek_width_neg" 49 } - gene_bs_ear_angle={ "ear_angle_pos" 33 "ear_angle_pos" 83 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 19 "ear_inner_shape_pos" 196 } - gene_bs_ear_bend={ "ear_upper_bend_pos" 47 "ear_both_bend_pos" 32 } - gene_bs_ear_outward={ "ear_outward_neg" 11 "ear_outward_pos" 44 } - gene_bs_ear_size={ "ear_size_neg" 39 "ear_size_pos" 4 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 7 "eye_corner_depth_neg" 109 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 51 "eye_fold_shape_neg" 50 } - gene_bs_eye_size={ "eye_size_pos" 9 "eye_size_neg" 60 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 9 "eye_upper_lid_size_pos" 3 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 93 "forehead_brow_curve_neg" 117 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 13 "forehead_brow_forward_neg" 1 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 63 "forehead_brow_inner_height_neg" 50 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 45 "forehead_brow_outer_height_neg" 50 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 47 "forehead_brow_width_pos" 38 } - gene_bs_jaw_def={ "jaw_def_neg" 147 "jaw_def_neg" 19 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 68 "mouth_lower_lip_def_pos" 122 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 21 "mouth_lower_lip_full_neg" 1 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 39 "mouth_lower_lip_pad_pos" 107 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 73 "mouth_lower_lip_width_neg" 18 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 137 "mouth_philtrum_def_pos" 26 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 37 "mouth_philtrum_shape_pos" 1 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 77 "mouth_philtrum_width_neg" 9 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 68 "mouth_upper_lip_def_pos" 68 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 111 "mouth_upper_lip_full_pos" 32 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 61 "mouth_upper_lip_profile_pos" 38 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 15 "mouth_upper_lip_width_pos" 47 } - gene_bs_nose_forward={ "nose_forward_pos" 71 "nose_forward_neg" 74 } - gene_bs_nose_height={ "nose_height_neg" 151 "nose_height_pos" 61 } - gene_bs_nose_length={ "nose_length_neg" 31 "nose_length_neg" 98 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 133 "nose_nostril_height_pos" 40 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 49 "nose_nostril_width_pos" 28 } - gene_bs_nose_profile={ "nose_profile_neg" 7 "nose_profile_pos" 1 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 39 "nose_ridge_angle_pos" 79 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 27 "nose_ridge_width_pos" 47 } - gene_bs_nose_size={ "nose_size_pos" 75 "nose_size_pos" 38 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 57 "nose_tip_angle_pos" 17 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 61 "nose_tip_forward_neg" 123 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 29 "nose_tip_width_pos" 38 } - face_detail_cheek_def={ "cheek_def_01" 19 "cheek_def_01" 176 } - face_detail_cheek_fat={ "cheek_fat_03_pos" 166 "cheek_fat_02_pos" 136 } - face_detail_chin_cleft={ "chin_dimple" 246 "chin_dimple" 6 } - face_detail_chin_def={ "chin_def_neg" 1 "chin_def_neg" 120 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 206 "eye_lower_lid_def" 80 } - face_detail_eye_socket={ "eye_socket_01" 255 "eye_socket_01" 193 } - face_detail_nasolabial={ "nasolabial_01" 159 "nasolabial_02" 25 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 216 "nose_ridge_def_neg" 25 } - face_detail_nose_tip_def={ "nose_tip_def" 209 "nose_tip_def" 228 } - face_detail_temple_def={ "temple_def" 201 "temple_def" 195 } - expression_brow_wrinkles={ "brow_wrinkles_03" 6 "brow_wrinkles_03" 6 } - expression_eye_wrinkles={ "eye_wrinkles_01" 75 "eye_wrinkles_01" 75 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 27 "forehead_wrinkles_01" 27 } - expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_4" 111 "complexion_3" 95 } - gene_height={ "normal_height" 123 "normal_height" 136 } - gene_bs_body_type={ "body_fat_head_fat_medium" 145 "body_fat_head_fat_low" 116 } - gene_bs_body_shape={ "body_shape_hourglass_full" 255 "body_shape_hourglass_full" 0 } - gene_bs_bust={ "bust_clothes" 41 "bust_shape_1_full" 181 } - gene_age={ "old_4" 216 "old_4" 216 } - gene_eyebrows_shape={ "far_spacing_avg_thickness" 186 "far_spacing_avg_thickness" 188 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 176 "layer_2_high_thickness" 204 } - gene_body_hair={ "body_hair_avg" 136 "body_hair_avg" 136 } - gene_hair_type={ "hair_wavy" 124 "hair_wavy" 124 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 125 "normal_eyes" 125 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - beards={ "steppe_beards_curly" 153 "no_beard" 0 } - clothes={ "steppe_commoner_clothes" 54 "most_clothes" 0 } - headgear={ "no_headgear" 151 "no_headgear" 0 } - legwear={ "mena_war_legwear" 170 "all_legwear" 0 } - hairstyles={ "scripted_character_hairstyles_01" 186 "all_hairstyles" 0 } - } - entity={ 3942081117 3942081117 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_bianca_savazzi.txt b/common/bookmark_portraits/historical_export_easteregg_bianca_savazzi.txt deleted file mode 100644 index a4d53f81..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_bianca_savazzi.txt +++ /dev/null @@ -1,119 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_bianca_savazzi -historical_export_easteregg_bianca_savazzi={ - type=female - id=16826 - age=0.280000 - genes={ hair_color={ 36 252 168 126 } - skin_color={ 100 123 8 63 } - eye_color={ 84 255 61 170 } - gene_chin_forward={ "chin_forward_neg" 128 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_neg" 73 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 170 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 113 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 45 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 152 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 161 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 16 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 215 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 237 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_neg" 38 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 163 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 167 "head_height_pos" 127 } - gene_head_width={ "head_width_neg" 113 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 158 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 179 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 172 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 169 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 130 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 164 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_neg" 117 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 211 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 156 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 151 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 130 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_neg" 54 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 127 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 127 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 169 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 233 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 61 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 238 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 147 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 225 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 123 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_neg" 224 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 160 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 0 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 161 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 98 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 255 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_neg" 124 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 98 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 71 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 132 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 21 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 43 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 21 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 140 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 77 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 77 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 30 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 89 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 5 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_03_pos" 135 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 242 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_04" 65 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 87 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 226 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 166 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 0 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 0 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 255 "complexion_1" 0 } - gene_height={ "normal_height" 127 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 95 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 51 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 127 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_lower_thickness" 255 "avg_spacing_avg_thickness" 226 } - gene_eyebrows_fullness={ "layer_2_lower_thickness" 253 "layer_2_avg_thickness" 92 } - gene_body_hair={ "body_hair_sparse" 255 "body_hair_sparse" 156 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 58 "all_hairstyles" 0 } - clothes={ "western_commoner_clothes" 18 "most_clothes" 0 } - headgear={ "no_headgear" 143 "no_headgear" 0 } - legwear={ "western_common_legwear" 18 "all_legwear" 0 } - } - entity={ 1863162561 1863162561 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_celine_jensen.txt b/common/bookmark_portraits/historical_export_easteregg_celine_jensen.txt new file mode 100644 index 00000000..eb3e6aef --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_celine_jensen.txt @@ -0,0 +1,139 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_celine_jensen +historical_export_easteregg_celine_jensen={ + type=female + id=19710 + random_seed=2746124708 + age=0.260000 + genes={ hair_color={ 111 201 238 31 } + skin_color={ 46 68 46 68 } + eye_color={ 171 169 241 153 } + gene_chin_forward={ "chin_forward_pos" 135 "chin_forward_pos" 135 } + gene_chin_height={ "chin_height_neg" 114 "chin_height_neg" 114 } + gene_chin_width={ "chin_width_neg" 123 "chin_width_neg" 123 } + gene_eye_angle={ "eye_angle_neg" 123 "eye_angle_neg" 123 } + gene_eye_depth={ "eye_depth_neg" 124 "eye_depth_neg" 124 } + gene_eye_height={ "eye_height_neg" 121 "eye_height_neg" 121 } + gene_eye_distance={ "eye_distance_pos" 127 "eye_distance_pos" 127 } + gene_eye_shut={ "eye_shut_pos" 133 "eye_shut_pos" 133 } + gene_forehead_angle={ "forehead_angle_pos" 147 "forehead_angle_pos" 147 } + gene_forehead_brow_height={ "forehead_brow_height_pos" 146 "forehead_brow_height_pos" 146 } + gene_forehead_roundness={ "forehead_roundness_pos" 177 "forehead_roundness_pos" 177 } + gene_forehead_width={ "forehead_width_neg" 122 "forehead_width_neg" 122 } + gene_forehead_height={ "forehead_height_neg" 106 "forehead_height_neg" 106 } + gene_head_height={ "head_height_neg" 118 "head_height_neg" 118 } + gene_head_width={ "head_width_neg" 103 "head_width_neg" 103 } + gene_head_profile={ "head_profile_neg" 78 "head_profile_neg" 78 } + gene_head_top_height={ "head_top_height_neg" 115 "head_top_height_neg" 115 } + gene_head_top_width={ "head_top_width_pos" 204 "head_top_width_pos" 204 } + gene_jaw_angle={ "jaw_angle_pos" 132 "jaw_angle_pos" 132 } + gene_jaw_forward={ "jaw_forward_pos" 132 "jaw_forward_pos" 132 } + gene_jaw_height={ "jaw_height_neg" 125 "jaw_height_neg" 125 } + gene_jaw_width={ "jaw_width_pos" 143 "jaw_width_pos" 143 } + gene_mouth_corner_depth={ "mouth_corner_depth_neg" 122 "mouth_corner_depth_neg" 122 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 137 "mouth_corner_height_pos" 137 } + gene_mouth_forward={ "mouth_forward_pos" 133 "mouth_forward_pos" 133 } + gene_mouth_height={ "mouth_height_neg" 127 "mouth_height_neg" 127 } + gene_mouth_width={ "mouth_width_neg" 76 "mouth_width_neg" 76 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 121 "mouth_upper_lip_size_neg" 121 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 111 "mouth_lower_lip_size_neg" 111 } + gene_mouth_open={ "mouth_open_neg" 8 "mouth_open_neg" 8 } + gene_neck_length={ "neck_length_pos" 138 "neck_length_pos" 138 } + gene_neck_width={ "neck_width_neg" 120 "neck_width_neg" 120 } + gene_bs_cheek_forward={ "cheek_forward_pos" 47 "cheek_forward_pos" 47 } + gene_bs_cheek_height={ "cheek_height_pos" 0 "cheek_height_neg" 0 } + gene_bs_cheek_width={ "cheek_width_pos" 38 "cheek_width_pos" 38 } + gene_bs_ear_angle={ "ear_angle_pos" 126 "ear_angle_pos" 126 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 41 "ear_inner_shape_pos" 41 } + gene_bs_ear_bend={ "ear_both_bend_pos" 38 "ear_both_bend_pos" 38 } + gene_bs_ear_outward={ "ear_outward_pos" 35 "ear_outward_pos" 35 } + gene_bs_ear_size={ "ear_size_neg" 31 "ear_size_neg" 31 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 154 "eye_corner_depth_pos" 154 } + gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 158 "eye_fold_shape_neg" 158 } + gene_bs_eye_size={ "eye_size_neg" 37 "eye_size_neg" 37 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 32 "eye_upper_lid_size_pos" 32 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 48 "forehead_brow_curve_neg" 48 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 4 "forehead_brow_forward_neg" 4 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 48 "forehead_brow_inner_height_neg" 48 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 87 "forehead_brow_outer_height_pos" 87 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 22 "forehead_brow_width_pos" 22 } + gene_bs_jaw_def={ "jaw_def_neg" 179 "jaw_def_neg" 179 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 186 "mouth_lower_lip_def_pos" 186 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 2 "mouth_lower_lip_full_neg" 2 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 8 "mouth_lower_lip_pad_neg" 8 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 8 "mouth_philtrum_def_pos" 8 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 32 "mouth_philtrum_shape_neg" 32 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 15 "mouth_philtrum_width_neg" 15 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 38 "mouth_upper_lip_def_pos" 38 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 69 "mouth_upper_lip_full_pos" 69 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 29 "mouth_upper_lip_profile_neg" 29 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 38 "mouth_upper_lip_width_neg" 38 } + gene_bs_nose_forward={ "nose_forward_neg" 23 "nose_forward_neg" 23 } + gene_bs_nose_height={ "nose_height_neg" 37 "nose_height_neg" 37 } + gene_bs_nose_length={ "nose_length_pos" 73 "nose_length_pos" 73 } + gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 99 "nose_nostril_height_neg" 99 } + gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 11 "nose_nostril_width_pos" 11 } + gene_bs_nose_profile={ "nose_profile_neg" 7 "nose_profile_neg" 7 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 6 "nose_ridge_angle_pos" 6 } + gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 7 "nose_ridge_width_pos" 7 } + gene_bs_nose_size={ "nose_size_pos" 45 "nose_size_pos" 45 } + gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 1 "nose_tip_angle_pos" 1 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 50 "nose_tip_forward_pos" 50 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 110 "nose_tip_width_pos" 110 } + face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 99 } + face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_neg" 102 } + face_detail_chin_cleft={ "chin_cleft" 19 "chin_cleft" 19 } + face_detail_chin_def={ "chin_def_neg" 168 "chin_def" 168 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 2 "eye_lower_lid_def" 2 } + face_detail_eye_socket={ "eye_socket_color_01" 16 "eye_socket_color_01" 16 } + face_detail_nasolabial={ "nasolabial_03" 14 "nasolabial_03" 14 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 9 "nose_ridge_def_neg" 9 } + face_detail_nose_tip_def={ "nose_tip_def" 101 "nose_tip_def" 101 } + face_detail_temple_def={ "temple_def" 244 "temple_def" 244 } + expression_brow_wrinkles={ "brow_wrinkles_04" 46 "brow_wrinkles_04" 46 } + expression_eye_wrinkles={ "eye_wrinkles_01" 93 "eye_wrinkles_01" 93 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 13 "forehead_wrinkles_01" 13 } + expression_other={ "cheek_wrinkles_both_01" 51 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_3" 125 "complexion_7" 153 } + gene_height={ "normal_height" 100 "normal_height" 100 } + gene_bs_body_type={ "body_fat_head_fat_full" 176 "body_fat_head_fat_full" 140 } + gene_bs_body_shape={ "body_shape_rectangle_full" 76 "body_shape_rectangle_full" 0 } + gene_bs_bust={ "bust_clothes" 80 "bust_shape_1_full" 101 } + gene_age={ "old_4" 81 "old_4" 81 } + gene_eyebrows_shape={ "far_spacing_avg_thickness" 141 "far_spacing_avg_thickness" 141 } + gene_eyebrows_fullness={ "layer_2_avg_thickness" 128 "layer_2_avg_thickness" 128 } + gene_body_hair={ "body_hair_sparse" 177 "body_hair_sparse" 177 } + gene_hair_type={ "hair_straight" 155 "hair_straight" 155 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 249 "normal_eyes" 249 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 62 "normal_eyelashes" 62 } + beards={ "ep2_beards" 111 "no_beard" 0 } + cloaks={ "no_cloak" 169 "no_cloak" 0 } + hairstyles={ "western_hairstyles_straight" 170 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 170 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "western_commoner_clothes" 170 "most_clothes" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 3293488942 3293488942 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_christian_daflos.txt b/common/bookmark_portraits/historical_export_easteregg_christian_daflos.txt deleted file mode 100644 index 5488e591..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_christian_daflos.txt +++ /dev/null @@ -1,121 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_christian_daflos -historical_export_easteregg_christian_daflos={ - type=boy - id=18219 - age=0.160000 - genes={ hair_color={ 238 200 224 192 } - skin_color={ 118 31 68 84 } - eye_color={ 71 164 71 164 } - gene_chin_forward={ "chin_forward_pos" 99 "chin_forward_pos" 135 } - gene_chin_height={ "chin_height_neg" 147 "chin_height_neg" 127 } - gene_chin_width={ "chin_width_pos" 100 "chin_width_pos" 140 } - gene_eye_angle={ "eye_angle_neg" 108 "eye_angle_neg" 119 } - gene_eye_depth={ "eye_depth_pos" 151 "eye_depth_pos" 139 } - gene_eye_height={ "eye_height_pos" 130 "eye_height_pos" 130 } - gene_eye_distance={ "eye_distance_neg" 122 "eye_distance_neg" 122 } - gene_eye_shut={ "eye_shut_pos" 150 "eye_shut_neg" 115 } - gene_forehead_angle={ "forehead_angle_pos" 89 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 169 "forehead_brow_height_neg" 96 } - gene_forehead_roundness={ "forehead_roundness_neg" 121 "forehead_roundness_neg" 121 } - gene_forehead_width={ "forehead_width_neg" 115 "forehead_width_neg" 115 } - gene_forehead_height={ "forehead_height_neg" 100 "forehead_height_neg" 69 } - gene_head_height={ "head_height_neg" 105 "head_height_neg" 111 } - gene_head_width={ "head_width_pos" 95 "head_width_pos" 153 } - gene_head_profile={ "head_profile_pos" 146 "head_profile_pos" 141 } - gene_head_top_height={ "head_top_height_pos" 135 "head_top_height_pos" 135 } - gene_head_top_width={ "head_top_width_pos" 153 "head_top_width_pos" 153 } - gene_jaw_angle={ "jaw_angle_neg" 31 "jaw_angle_neg" 81 } - gene_jaw_forward={ "jaw_forward_pos" 118 "jaw_forward_pos" 156 } - gene_jaw_height={ "jaw_height_pos" 100 "jaw_height_pos" 130 } - gene_jaw_width={ "jaw_width_pos" 81 "jaw_width_pos" 171 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 187 "mouth_corner_depth_pos" 146 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 101 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_neg" 101 "mouth_forward_neg" 115 } - gene_mouth_height={ "mouth_height_neg" 149 "mouth_height_neg" 122 } - gene_mouth_width={ "mouth_width_neg" 105 "mouth_width_neg" 109 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 138 "mouth_upper_lip_size_pos" 148 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 141 "mouth_lower_lip_size_neg" 113 } - gene_mouth_open={ "mouth_open_pos" 126 "mouth_open_pos" 155 } - gene_neck_length={ "neck_length_pos" 112 "neck_length_pos" 136 } - gene_neck_width={ "neck_width_pos" 173 "neck_width_pos" 153 } - gene_bs_cheek_forward={ "cheek_forward_neg" 42 "cheek_forward_pos" 44 } - gene_bs_cheek_height={ "cheek_height_pos" 104 "cheek_height_pos" 34 } - gene_bs_cheek_width={ "cheek_width_pos" 51 "cheek_width_pos" 51 } - gene_bs_ear_angle={ "ear_angle_pos" 168 "ear_angle_pos" 4 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 146 "ear_inner_shape_pos" 146 } - gene_bs_ear_bend={ "ear_lower_bend_pos" 91 "ear_lower_bend_pos" 154 } - gene_bs_ear_outward={ "ear_outward_pos" 28 "ear_outward_pos" 28 } - gene_bs_ear_size={ "ear_size_neg" 11 "ear_size_neg" 11 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 142 "eye_corner_depth_neg" 47 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 105 "eye_fold_shape_neg" 32 } - gene_bs_eye_size={ "eye_size_pos" 36 "eye_size_pos" 36 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 53 "eye_upper_lid_size_pos" 201 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 240 "forehead_brow_curve_neg" 179 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 22 "forehead_brow_forward_neg" 22 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 0 "forehead_brow_inner_height_pos" 92 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 130 "forehead_brow_outer_height_neg" 17 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 39 "forehead_brow_width_pos" 37 } - gene_bs_jaw_def={ "jaw_def_pos" 98 "jaw_def_neg" 56 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 163 "mouth_lower_lip_def_pos" 44 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 30 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 150 "mouth_lower_lip_pad_pos" 25 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 3 "mouth_lower_lip_width_neg" 3 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 107 "mouth_philtrum_def_pos" 84 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 181 "mouth_philtrum_shape_neg" 17 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 4 "mouth_philtrum_width_neg" 4 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 163 "mouth_upper_lip_def_pos" 48 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 178 "mouth_upper_lip_full_neg" 164 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 7 "mouth_upper_lip_width_pos" 101 } - gene_bs_nose_forward={ "nose_forward_pos" 2 "nose_forward_pos" 38 } - gene_bs_nose_height={ "nose_height_pos" 136 "nose_height_neg" 63 } - gene_bs_nose_length={ "nose_length_neg" 53 "nose_length_neg" 116 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 17 "nose_nostril_height_pos" 11 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 177 "nose_nostril_width_neg" 1 } - gene_bs_nose_profile={ "nose_profile_pos" 123 "nose_profile_neg" 37 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 155 "nose_ridge_angle_pos" 9 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 0 "nose_ridge_width_pos" 15 } - gene_bs_nose_size={ "nose_size_pos" 136 "nose_size_pos" 26 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 80 "nose_tip_angle_pos" 28 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 15 "nose_tip_forward_neg" 44 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 42 "nose_tip_width_neg" 145 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 13 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_neg" 95 } - face_detail_chin_cleft={ "chin_cleft" 62 "chin_dimple" 11 } - face_detail_chin_def={ "chin_def" 100 "chin_def" 97 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 103 "eye_lower_lid_def" 2 } - face_detail_eye_socket={ "eye_socket_02" 173 "eye_socket_02" 65 } - face_detail_nasolabial={ "nasolabial_03" 0 "nasolabial_03" 15 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 19 "nose_ridge_def_neg" 19 } - face_detail_nose_tip_def={ "nose_tip_def" 135 "nose_tip_def" 234 } - face_detail_temple_def={ "temple_def" 62 "temple_def" 154 } - expression_brow_wrinkles={ "brow_wrinkles_03" 0 "brow_wrinkles_03" 70 } - expression_eye_wrinkles={ "eye_wrinkles_02" 166 "eye_wrinkles_01" 242 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 89 "forehead_wrinkles_01" 9 } - expression_other={ "cheek_wrinkles_right_01" 19 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_3" 255 "complexion_3" 128 } - gene_height={ "normal_height" 146 "normal_height" 138 } - gene_bs_body_type={ "body_fat_head_fat_full" 176 "body_fat_head_fat_full" 142 } - gene_bs_body_shape={ "body_shape_average_clothed" 30 "body_shape_hourglass_full" 0 } - gene_bs_bust={ "bust_clothes" 9 "bust_shape_2_full" 9 } - gene_age={ "old_3" 104 "old_4" 196 } - gene_eyebrows_shape={ "far_spacing_lower_thickness" 255 "avg_spacing_lower_thickness" 245 } - gene_eyebrows_fullness={ "layer_2_lower_thickness" 226 "layer_2_lower_thickness" 185 } - gene_body_hair={ "body_hair_avg" 163 "body_hair_sparse" 117 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "bloodshot_eyes" 255 "normal_eyes" 225 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 26 "normal_eyelashes" 26 } - pose={ "" 255 "" 0 } - gene_drunkard={ "drunkard" 216 "drunkard" 0 } - hairstyles={ "scripted_character_hairstyles_01" 61 "all_hairstyles" 0 } - beards={ "no_beard" 59 "no_beard" 0 } - clothes={ "byzantine_commoner_clothes" 62 "most_clothes" 0 } - headgear={ "no_headgear" 59 "no_headgear" 0 } - legwear={ "western_common_legwear" 103 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_claudia_baldassi.txt b/common/bookmark_portraits/historical_export_easteregg_claudia_baldassi.txt deleted file mode 100644 index 2a2518d4..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_claudia_baldassi.txt +++ /dev/null @@ -1,121 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_claudia_baldassi -historical_export_easteregg_claudia_baldassi={ - type=female - id=18237 - age=0.320000 - genes={ hair_color={ 255 125 72 240 } - skin_color={ 1 22 104 68 } - eye_color={ 44 92 93 195 } - gene_chin_forward={ "chin_forward_neg" 106 "chin_forward_neg" 106 } - gene_chin_height={ "chin_height_neg" 129 "chin_height_neg" 124 } - gene_chin_width={ "chin_width_neg" 123 "chin_width_neg" 116 } - gene_eye_angle={ "eye_angle_neg" 125 "eye_angle_neg" 125 } - gene_eye_depth={ "eye_depth_neg" 134 "eye_depth_neg" 119 } - gene_eye_height={ "eye_height_neg" 151 "eye_height_neg" 125 } - gene_eye_distance={ "eye_distance_pos" 116 "eye_distance_pos" 137 } - gene_eye_shut={ "eye_shut_pos" 78 "eye_shut_pos" 138 } - gene_forehead_angle={ "forehead_angle_pos" 115 "forehead_angle_pos" 147 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 166 "forehead_brow_height_neg" 125 } - gene_forehead_roundness={ "forehead_roundness_neg" 64 "forehead_roundness_neg" 120 } - gene_forehead_width={ "forehead_width_pos" 83 "forehead_width_pos" 141 } - gene_forehead_height={ "forehead_height_neg" 86 "forehead_height_neg" 86 } - gene_head_height={ "head_height_neg" 181 "head_height_neg" 112 } - gene_head_width={ "head_width_pos" 68 "head_width_pos" 165 } - gene_head_profile={ "head_profile_pos" 99 "head_profile_pos" 147 } - gene_head_top_height={ "head_top_height_neg" 163 "head_top_height_neg" 114 } - gene_head_top_width={ "head_top_width_pos" 209 "head_top_width_pos" 146 } - gene_jaw_angle={ "jaw_angle_pos" 142 "jaw_angle_pos" 174 } - gene_jaw_forward={ "jaw_forward_pos" 156 "jaw_forward_pos" 134 } - gene_jaw_height={ "jaw_height_neg" 150 "jaw_height_neg" 116 } - gene_jaw_width={ "jaw_width_neg" 98 "jaw_width_neg" 116 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 0 "mouth_corner_depth_pos" 132 } - gene_mouth_corner_height={ "mouth_corner_height_neg" 217 "mouth_corner_height_neg" 93 } - gene_mouth_forward={ "mouth_forward_pos" 46 "mouth_forward_pos" 135 } - gene_mouth_height={ "mouth_height_pos" 120 "mouth_height_pos" 132 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 160 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 69 "mouth_upper_lip_size_neg" 114 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 87 "mouth_lower_lip_size_neg" 83 } - gene_mouth_open={ "mouth_open_neg" 120 "mouth_open_neg" 29 } - gene_neck_length={ "neck_length_neg" 112 "neck_length_neg" 122 } - gene_neck_width={ "neck_width_pos" 156 "neck_width_pos" 154 } - gene_bs_cheek_forward={ "cheek_forward_pos" 121 "cheek_forward_pos" 14 } - gene_bs_cheek_height={ "cheek_height_neg" 46 "cheek_height_neg" 46 } - gene_bs_cheek_width={ "cheek_width_pos" 9 "cheek_width_pos" 9 } - gene_bs_ear_angle={ "ear_angle_neg" 65 "ear_angle_neg" 65 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 38 "ear_inner_shape_pos" 38 } - gene_bs_ear_bend={ "ear_lower_bend_pos" 24 "ear_lower_bend_pos" 24 } - gene_bs_ear_outward={ "ear_outward_pos" 30 "ear_outward_pos" 30 } - gene_bs_ear_size={ "ear_size_pos" 1 "ear_size_pos" 1 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 53 "eye_corner_depth_neg" 24 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 137 "eye_fold_shape_pos" 39 } - gene_bs_eye_size={ "eye_size_pos" 81 "eye_size_neg" 29 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 35 "eye_upper_lid_size_pos" 147 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 13 "forehead_brow_curve_neg" 13 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 117 "forehead_brow_forward_neg" 117 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 127 "forehead_brow_inner_height_neg" 50 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 21 "forehead_brow_outer_height_pos" 16 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 118 "forehead_brow_width_pos" 118 } - gene_bs_jaw_def={ "jaw_def_neg" 135 "jaw_def_pos" 38 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 15 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 71 "mouth_lower_lip_full_pos" 113 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 35 "mouth_lower_lip_pad_neg" 138 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 87 "mouth_lower_lip_width_neg" 28 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 17 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 255 "mouth_philtrum_shape_neg" 56 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 165 "mouth_philtrum_width_neg" 21 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 31 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 13 "mouth_upper_lip_full_neg" 10 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 55 "mouth_upper_lip_profile_pos" 48 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 11 "mouth_upper_lip_width_neg" 43 } - gene_bs_nose_forward={ "nose_forward_neg" 57 "nose_forward_neg" 86 } - gene_bs_nose_height={ "nose_height_neg" 11 "nose_height_neg" 103 } - gene_bs_nose_length={ "nose_length_pos" 39 "nose_length_neg" 51 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 93 "nose_nostril_height_pos" 58 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 87 "nose_nostril_width_neg" 40 } - gene_bs_nose_profile={ "nose_profile_hawk" 75 "nose_profile_hawk_pos" 9 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 17 "nose_ridge_angle_neg" 36 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 89 "nose_ridge_width_pos" 3 } - gene_bs_nose_size={ "nose_size_neg" 41 "nose_size_pos" 3 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 79 "nose_tip_angle_neg" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 65 "nose_tip_forward_neg" 8 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 243 "nose_tip_width_neg" 72 } - face_detail_cheek_def={ "cheek_def_02" 0 "cheek_def_02" 67 } - face_detail_cheek_fat={ "cheek_fat_04_pos" 73 "cheek_fat_03_pos" 105 } - face_detail_chin_cleft={ "chin_cleft" 2 "chin_cleft" 2 } - face_detail_chin_def={ "chin_def" 245 "chin_def" 245 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 103 } - face_detail_eye_socket={ "eye_socket_01" 255 "eye_socket_01" 206 } - face_detail_nasolabial={ "nasolabial_02" 11 "nasolabial_02" 11 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 201 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 15 } - face_detail_temple_def={ "temple_def" 28 "temple_def" 113 } - expression_brow_wrinkles={ "brow_wrinkles_03" 215 "brow_wrinkles_03" 215 } - expression_eye_wrinkles={ "eye_wrinkles_01" 255 "eye_wrinkles_01" 216 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 159 "forehead_wrinkles_01" 29 } - expression_other={ "cheek_wrinkles_both_01" 29 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_1" 136 "complexion_2" 194 } - gene_height={ "normal_height" 152 "normal_height" 126 } - gene_bs_body_type={ "body_fat_head_fat_medium" 124 "body_fat_head_fat_low" 117 } - gene_bs_body_shape={ "body_shape_average_clothed" 115 "body_shape_rectangle_half" 3 } - gene_bs_bust={ "bust_clothes" 169 "bust_shape_4_half" 92 } - gene_age={ "old_2" 55 "old_2" 55 } - gene_eyebrows_shape={ "far_spacing_avg_thickness" 207 "far_spacing_lower_thickness" 113 } - gene_eyebrows_fullness={ "layer_2_high_thickness" 185 "layer_2_avg_thickness" 105 } - gene_body_hair={ "body_hair_sparse" 133 "body_hair_sparse" 133 } - gene_hair_type={ "hair_straight" 109 "hair_straight" 109 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 170 "normal_eyes" 170 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 218 "normal_eyelashes" 218 } - pose={ "" 255 "" 0 } - beards={ "no_beard" 26 "no_beard" 0 } - clothes={ "western_commoner_clothes" 62 "most_clothes" 0 } - hairstyles={ "scripted_character_hairstyles_01" 58 "all_hairstyles" 0 } - headgear={ "western_common" 135 "no_headgear" 0 } - legwear={ "western_common_legwear" 62 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - } - entity={ 1903276529 1903276529 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_daan_broekhof.txt b/common/bookmark_portraits/historical_export_easteregg_daan_broekhof.txt new file mode 100644 index 00000000..641b0a0e --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_daan_broekhof.txt @@ -0,0 +1,152 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_daan_broekhof +historical_export_easteregg_daan_broekhof={ + type=male + id=18227 + random_seed=4230239655 + age=0.400000 + genes={ hair_color={ 18 154 210 150 } + skin_color={ 17 14 127 82 } + eye_color={ 204 164 205 153 } + gene_chin_forward={ "chin_forward_neg" 107 "chin_forward_neg" 101 } + gene_chin_height={ "chin_height_pos" 131 "chin_height_pos" 131 } + gene_chin_width={ "chin_width_neg" 165 "chin_width_neg" 121 } + gene_eye_angle={ "eye_angle_neg" 113 "eye_angle_neg" 122 } + gene_eye_depth={ "eye_depth_neg" 129 "eye_depth_neg" 115 } + gene_eye_height={ "eye_height_pos" 147 "eye_height_pos" 132 } + gene_eye_distance={ "eye_distance_neg" 105 "eye_distance_neg" 127 } + gene_eye_shut={ "eye_shut_pos" 121 "eye_shut_pos" 129 } + gene_forehead_angle={ "forehead_angle_neg" 119 "forehead_angle_neg" 122 } + gene_forehead_brow_height={ "forehead_brow_height_pos" 142 "forehead_brow_height_pos" 155 } + gene_forehead_roundness={ "forehead_roundness_pos" 202 "forehead_roundness_pos" 142 } + gene_forehead_width={ "forehead_width_neg" 184 "forehead_width_neg" 82 } + gene_forehead_height={ "forehead_height_neg" 255 "forehead_height_neg" 111 } + gene_head_height={ "head_height_neg" 115 "head_height_neg" 119 } + gene_head_width={ "head_width_neg" 92 "head_width_neg" 88 } + gene_head_profile={ "head_profile_neg" 72 "head_profile_neg" 96 } + gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 132 } + gene_head_top_width={ "head_top_width_pos" 128 "head_top_width_pos" 130 } + gene_jaw_angle={ "jaw_angle_neg" 115 "jaw_angle_neg" 117 } + gene_jaw_forward={ "jaw_forward_neg" 110 "jaw_forward_neg" 124 } + gene_jaw_height={ "jaw_height_pos" 59 "jaw_height_pos" 140 } + gene_jaw_width={ "jaw_width_neg" 161 "jaw_width_neg" 119 } + gene_mouth_corner_depth={ "mouth_corner_depth_neg" 117 "mouth_corner_depth_neg" 123 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 157 "mouth_corner_height_pos" 128 } + gene_mouth_forward={ "mouth_forward_neg" 100 "mouth_forward_neg" 117 } + gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } + gene_mouth_width={ "mouth_width_pos" 129 "mouth_width_pos" 129 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 145 "mouth_upper_lip_size_pos" 132 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 93 "mouth_lower_lip_size_neg" 107 } + gene_mouth_open={ "mouth_open_pos" 135 "mouth_open_pos" 135 } + gene_neck_length={ "neck_length_pos" 102 "neck_length_pos" 131 } + gene_neck_width={ "neck_width_pos" 74 "neck_width_pos" 148 } + gene_bs_cheek_forward={ "cheek_forward_neg" 171 "cheek_forward_pos" 4 } + gene_bs_cheek_height={ "cheek_height_neg" 103 "cheek_height_pos" 18 } + gene_bs_cheek_width={ "cheek_width_neg" 39 "cheek_width_neg" 50 } + gene_bs_ear_angle={ "ear_angle_pos" 21 "ear_angle_neg" 17 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 52 "ear_inner_shape_pos" 78 } + gene_bs_ear_bend={ "ear_upper_bend_pos" 45 "ear_lower_bend_pos" 43 } + gene_bs_ear_outward={ "ear_outward_neg" 51 "ear_outward_pos" 56 } + gene_bs_ear_size={ "ear_size_pos" 39 "ear_size_pos" 14 } + gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 101 "eye_corner_depth_pos" 237 } + gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 157 "eye_fold_shape_neg" 81 } + gene_bs_eye_size={ "eye_size_neg" 83 "eye_size_pos" 72 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 1 "eye_upper_lid_size_pos" 105 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 23 "forehead_brow_curve_neg" 133 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 7 "forehead_brow_forward_pos" 29 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 67 "forehead_brow_inner_height_pos" 8 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 5 "forehead_brow_outer_height_neg" 39 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 17 "forehead_brow_width_pos" 23 } + gene_bs_jaw_def={ "jaw_def_neg" 255 "jaw_def_neg" 16 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 98 "mouth_lower_lip_def_pos" 85 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 73 "mouth_lower_lip_full_neg" 33 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 57 "mouth_lower_lip_pad_neg" 0 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 27 "mouth_lower_lip_width_pos" 5 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 132 "mouth_philtrum_def_pos" 22 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 123 "mouth_philtrum_shape_neg" 18 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 27 "mouth_philtrum_width_neg" 34 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 176 "mouth_upper_lip_def_pos" 2 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 97 "mouth_upper_lip_full_neg" 12 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 59 "mouth_upper_lip_profile_pos" 56 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 67 "mouth_upper_lip_width_pos" 92 } + gene_bs_nose_forward={ "nose_forward_neg" 21 "nose_forward_neg" 25 } + gene_bs_nose_height={ "nose_height_pos" 157 "nose_height_pos" 47 } + gene_bs_nose_length={ "nose_length_pos" 73 "nose_length_pos" 73 } + gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 253 "nose_nostril_height_pos" 27 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 51 "nose_nostril_width_neg" 9 } + gene_bs_nose_profile={ "nose_profile_hawk_pos" 53 "nose_profile_hawk" 28 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 10 "nose_ridge_angle_pos" 10 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 9 "nose_ridge_width_neg" 9 } + gene_bs_nose_size={ "nose_size_pos" 105 "nose_size_pos" 27 } + gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 83 "nose_tip_angle_neg" 99 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 205 "nose_tip_forward_pos" 47 } + gene_bs_nose_tip_width={ "nose_tip_width_neg" 13 "nose_tip_width_pos" 32 } + face_detail_cheek_def={ "cheek_def_02" 0 "cheek_def_01" 13 } + face_detail_cheek_fat={ "cheek_fat_02_pos" 0 "cheek_fat_02_pos" 9 } + face_detail_chin_cleft={ "chin_cleft" 160 "chin_cleft" 11 } + face_detail_chin_def={ "chin_def" 0 "chin_def" 7 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 52 "eye_lower_lid_def" 0 } + face_detail_eye_socket={ "eye_socket_01" 68 "eye_socket_color_01" 7 } + face_detail_nasolabial={ "nasolabial_02" 0 "nasolabial_03" 24 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 42 "nose_ridge_def_pos" 0 } + face_detail_nose_tip_def={ "nose_tip_def" 63 "nose_tip_def" 194 } + face_detail_temple_def={ "temple_def" 176 "temple_def" 200 } + expression_brow_wrinkles={ "brow_wrinkles_03" 253 "brow_wrinkles_03" 96 } + expression_eye_wrinkles={ "eye_wrinkles_01" 0 "eye_wrinkles_01" 0 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 46 "forehead_wrinkles_01" 46 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_3" 52 "complexion_7" 197 } + gene_height={ "normal_height" 180 "normal_height" 119 } + gene_bs_body_type={ "body_fat_head_fat_low" 83 "body_fat_head_fat_full" 115 } + gene_bs_body_shape={ "body_shape_rectangle_full" 128 "body_shape_rectangle_full" 52 } + gene_bs_bust={ "bust_clothes" 95 "bust_shape_1_half" 144 } + gene_age={ "old_2" 169 "old_2" 169 } + gene_eyebrows_shape={ "far_spacing_lower_thickness" 134 "avg_spacing_avg_thickness" 163 } + gene_eyebrows_fullness={ "layer_2_lower_thickness" 0 "layer_2_lower_thickness" 143 } + gene_body_hair={ "body_hair_avg" 90 "body_hair_avg" 90 } + gene_hair_type={ "hair_straight" 168 "hair_straight" 168 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 220 "normal_eyes" 220 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 183 "normal_eyelashes" 183 } + beards={ "no_beard" 10 "no_beard" 0 } + cloaks={ "no_cloak" 226 "no_cloak" 0 } + hairstyles={ "scripted_character_hairstyles_01" 221 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 230 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "western_commoner_clothes" 230 "most_clothes" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + gene_cloak={ "cloak_additive" 255 "cloak_additive" 0 } + } + entity={ 1863162561 1863162561 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=75156179 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_daniel_moore.txt b/common/bookmark_portraits/historical_export_easteregg_daniel_moore.txt deleted file mode 100644 index 1a6c3409..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_daniel_moore.txt +++ /dev/null @@ -1,121 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_daniel_moore -historical_export_easteregg_daniel_moore={ - type=male - id=19328 - age=0.250000 - genes={ hair_color={ 224 181 224 181 } - skin_color={ 20 84 20 84 } - eye_color={ 55 155 55 155 } - gene_chin_forward={ "chin_forward_pos" 135 "chin_forward_pos" 135 } - gene_chin_height={ "chin_height_pos" 129 "chin_height_pos" 129 } - gene_chin_width={ "chin_width_neg" 120 "chin_width_neg" 120 } - gene_eye_angle={ "eye_angle_pos" 141 "eye_angle_pos" 141 } - gene_eye_depth={ "eye_depth_pos" 133 "eye_depth_pos" 133 } - gene_eye_height={ "eye_height_neg" 117 "eye_height_neg" 117 } - gene_eye_distance={ "eye_distance_neg" 101 "eye_distance_neg" 101 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 146 "forehead_angle_pos" 146 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 178 "forehead_brow_height_pos" 178 } - gene_forehead_roundness={ "forehead_roundness_pos" 164 "forehead_roundness_pos" 164 } - gene_forehead_width={ "forehead_width_neg" 127 "forehead_width_neg" 127 } - gene_forehead_height={ "forehead_height_neg" 41 "forehead_height_neg" 41 } - gene_head_height={ "head_height_neg" 107 "head_height_neg" 107 } - gene_head_width={ "head_width_pos" 143 "head_width_pos" 143 } - gene_head_profile={ "head_profile_pos" 146 "head_profile_pos" 146 } - gene_head_top_height={ "head_top_height_neg" 96 "head_top_height_neg" 96 } - gene_head_top_width={ "head_top_width_pos" 145 "head_top_width_pos" 145 } - gene_jaw_angle={ "jaw_angle_neg" 118 "jaw_angle_neg" 118 } - gene_jaw_forward={ "jaw_forward_neg" 115 "jaw_forward_neg" 115 } - gene_jaw_height={ "jaw_height_neg" 114 "jaw_height_neg" 114 } - gene_jaw_width={ "jaw_width_neg" 114 "jaw_width_neg" 114 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 120 "mouth_corner_depth_neg" 120 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 135 "mouth_corner_height_pos" 135 } - gene_mouth_forward={ "mouth_forward_pos" 128 "mouth_forward_pos" 128 } - gene_mouth_height={ "mouth_height_pos" 130 "mouth_height_pos" 130 } - gene_mouth_width={ "mouth_width_pos" 151 "mouth_width_pos" 151 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 86 "mouth_upper_lip_size_neg" 86 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 137 "mouth_lower_lip_size_pos" 137 } - gene_mouth_open={ "mouth_open_neg" 118 "mouth_open_neg" 118 } - gene_neck_length={ "neck_length_pos" 146 "neck_length_pos" 146 } - gene_neck_width={ "neck_width_neg" 117 "neck_width_neg" 117 } - gene_bs_cheek_forward={ "cheek_forward_neg" 47 "cheek_forward_neg" 47 } - gene_bs_cheek_height={ "cheek_height_neg" 0 "cheek_height_neg" 0 } - gene_bs_cheek_width={ "cheek_width_neg" 46 "cheek_width_neg" 46 } - gene_bs_ear_angle={ "ear_angle_neg" 8 "ear_angle_neg" 8 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 38 "ear_inner_shape_pos" 38 } - gene_bs_ear_bend={ "ear_lower_bend_pos" 116 "ear_lower_bend_pos" 116 } - gene_bs_ear_outward={ "ear_outward_neg" 48 "ear_outward_neg" 48 } - gene_bs_ear_size={ "ear_size_neg" 9 "ear_size_neg" 9 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 46 "eye_corner_depth_neg" 46 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 6 "eye_fold_shape_pos" 6 } - gene_bs_eye_size={ "eye_size_pos" 16 "eye_size_pos" 16 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 22 "eye_upper_lid_size_neg" 22 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 51 "forehead_brow_curve_neg" 51 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 51 "forehead_brow_forward_pos" 51 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 70 "forehead_brow_inner_height_neg" 70 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 23 "forehead_brow_width_neg" 23 } - gene_bs_jaw_def={ "jaw_def_neg" 127 "jaw_def_neg" 127 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 40 "mouth_lower_lip_def_pos" 40 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 33 "mouth_lower_lip_full_neg" 33 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 24 "mouth_lower_lip_pad_neg" 24 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 30 "mouth_lower_lip_width_neg" 30 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 17 "mouth_philtrum_def_pos" 17 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 116 "mouth_philtrum_shape_pos" 116 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 92 "mouth_philtrum_width_pos" 92 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 5 "mouth_upper_lip_def_pos" 5 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 22 "mouth_upper_lip_full_neg" 22 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 81 "mouth_upper_lip_profile_neg" 81 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 4 "mouth_upper_lip_width_neg" 4 } - gene_bs_nose_forward={ "nose_forward_pos" 8 "nose_forward_pos" 8 } - gene_bs_nose_height={ "nose_height_neg" 49 "nose_height_neg" 49 } - gene_bs_nose_length={ "nose_length_pos" 8 "nose_length_pos" 8 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 36 "nose_nostril_height_pos" 36 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 33 "nose_nostril_width_neg" 33 } - gene_bs_nose_profile={ "nose_profile_neg" 27 "nose_profile_neg" 27 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 14 "nose_ridge_angle_neg" 14 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 5 "nose_ridge_width_pos" 5 } - gene_bs_nose_size={ "nose_size_pos" 33 "nose_size_pos" 33 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 20 "nose_tip_angle_neg" 20 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 26 "nose_tip_forward_neg" 26 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 6 "nose_tip_width_neg" 6 } - face_detail_cheek_def={ "cheek_def_02" 11 "cheek_def_02" 11 } - face_detail_cheek_fat={ "cheek_fat_02_pos" 105 "cheek_fat_02_pos" 105 } - face_detail_chin_cleft={ "chin_cleft" 19 "chin_cleft" 19 } - face_detail_chin_def={ "chin_def" 19 "chin_def" 19 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 218 "eye_lower_lid_def" 218 } - face_detail_eye_socket={ "eye_socket_03" 21 "eye_socket_03" 21 } - face_detail_nasolabial={ "nasolabial_03" 19 "nasolabial_03" 19 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 22 "nose_tip_def" 22 } - face_detail_temple_def={ "temple_def" 149 "temple_def" 149 } - expression_brow_wrinkles={ "brow_wrinkles_04" 69 "brow_wrinkles_04" 69 } - expression_eye_wrinkles={ "eye_wrinkles_01" 255 "eye_wrinkles_01" 81 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 93 "forehead_wrinkles_01" 93 } - expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_2" 129 "complexion_2" 129 } - gene_height={ "normal_height" 132 "normal_height" 132 } - gene_bs_body_type={ "body_fat_head_fat_low" 114 "body_fat_head_fat_low" 132 } - gene_bs_body_shape={ "body_shape_rectangle_full" 91 "body_shape_rectangle_full" 0 } - gene_bs_bust={ "bust_clothes" 115 "bust_shape_3_full" 144 } - gene_age={ "old_3" 99 "old_3" 99 } - gene_eyebrows_shape={ "far_spacing_low_thickness" 128 "far_spacing_low_thickness" 128 } - gene_eyebrows_fullness={ "layer_2_lower_thickness" 138 "layer_2_lower_thickness" 138 } - gene_body_hair={ "body_hair_sparse" 139 "body_hair_sparse" 139 } - gene_hair_type={ "hair_curly" 156 "hair_curly" 156 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 239 "normal_eyes" 239 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 89 "normal_eyelashes" 89 } - pose={ "" 255 "" 0 } - beards={ "no_beard" 60 "no_beard" 0 } - clothes={ "northern_commoner_clothes" 197 "most_clothes" 0 } - hairstyles={ "northern_hairstyles_curly" 6 "all_hairstyles" 0 } - headgear={ "northern_common" 64 "no_headgear" 0 } - legwear={ "western_common_legwear" 89 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_david_drake.txt b/common/bookmark_portraits/historical_export_easteregg_david_drake.txt new file mode 100644 index 00000000..50926f13 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_david_drake.txt @@ -0,0 +1,151 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_david_drake +historical_export_easteregg_david_drake={ + type=male + id=20281 + random_seed=1144079814 + age=0.240000 + genes={ hair_color={ 5 191 139 99 } + skin_color={ 229 25 26 69 } + eye_color={ 121 124 182 174 } + gene_chin_forward={ "chin_forward_neg" 122 "chin_forward_neg" 115 } + gene_chin_height={ "chin_height_neg" 65 "chin_height_neg" 121 } + gene_chin_width={ "chin_width_neg" 116 "chin_width_neg" 117 } + gene_eye_angle={ "eye_angle_pos" 122 "eye_angle_pos" 138 } + gene_eye_depth={ "eye_depth_neg" 168 "eye_depth_neg" 120 } + gene_eye_height={ "eye_height_neg" 132 "eye_height_neg" 124 } + gene_eye_distance={ "eye_distance_pos" 108 "eye_distance_pos" 138 } + gene_eye_shut={ "eye_shut_pos" 123 "eye_shut_pos" 136 } + gene_forehead_angle={ "forehead_angle_pos" 226 "forehead_angle_pos" 139 } + gene_forehead_brow_height={ "forehead_brow_height_pos" 143 "forehead_brow_height_pos" 168 } + gene_forehead_roundness={ "forehead_roundness_pos" 157 "forehead_roundness_pos" 144 } + gene_forehead_width={ "forehead_width_neg" 151 "forehead_width_neg" 114 } + gene_forehead_height={ "forehead_height_neg" 130 "forehead_height_neg" 100 } + gene_head_height={ "head_height_neg" 208 "head_height_neg" 100 } + gene_head_width={ "head_width_pos" 25 "head_width_pos" 176 } + gene_head_profile={ "head_profile_pos" 133 "head_profile_pos" 162 } + gene_head_top_height={ "head_top_height_neg" 0 "head_top_height_neg" 119 } + gene_head_top_width={ "head_top_width_pos" 145 "head_top_width_pos" 227 } + gene_jaw_angle={ "jaw_angle_pos" 135 "jaw_angle_pos" 134 } + gene_jaw_forward={ "jaw_forward_pos" 127 "jaw_forward_pos" 136 } + gene_jaw_height={ "jaw_height_pos" 67 "jaw_height_pos" 139 } + gene_jaw_width={ "jaw_width_pos" 98 "jaw_width_pos" 161 } + gene_mouth_corner_depth={ "mouth_corner_depth_neg" 226 "mouth_corner_depth_neg" 124 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 190 "mouth_corner_height_pos" 132 } + gene_mouth_forward={ "mouth_forward_neg" 118 "mouth_forward_neg" 124 } + gene_mouth_height={ "mouth_height_pos" 255 "mouth_height_pos" 134 } + gene_mouth_width={ "mouth_width_pos" 121 "mouth_width_pos" 137 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 143 "mouth_upper_lip_size_neg" 115 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 110 "mouth_lower_lip_size_pos" 146 } + gene_mouth_open={ "mouth_open_neg" 0 "mouth_open_neg" 112 } + gene_neck_length={ "neck_length_pos" 161 "neck_length_pos" 157 } + gene_neck_width={ "neck_width_neg" 30 "neck_width_neg" 121 } + gene_bs_cheek_forward={ "cheek_forward_neg" 41 "cheek_forward_pos" 33 } + gene_bs_cheek_height={ "cheek_height_neg" 163 "cheek_height_pos" 22 } + gene_bs_cheek_width={ "cheek_width_neg" 121 "cheek_width_pos" 42 } + gene_bs_ear_angle={ "ear_angle_neg" 141 "ear_angle_neg" 32 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 31 "ear_inner_shape_pos" 28 } + gene_bs_ear_bend={ "ear_lower_bend_pos" 45 "ear_lower_bend_pos" 4 } + gene_bs_ear_outward={ "ear_outward_pos" 47 "ear_outward_neg" 46 } + gene_bs_ear_size={ "ear_size_neg" 33 "ear_size_neg" 117 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 75 "eye_corner_depth_pos" 160 } + gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 103 "eye_fold_shape_pos" 86 } + gene_bs_eye_size={ "eye_size_pos" 27 "eye_size_pos" 37 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 29 "eye_upper_lid_size_neg" 25 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 189 "forehead_brow_curve_neg" 10 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 5 "forehead_brow_forward_pos" 24 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 105 "forehead_brow_inner_height_pos" 61 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 105 "forehead_brow_outer_height_neg" 11 } + gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 51 "forehead_brow_width_pos" 59 } + gene_bs_jaw_def={ "jaw_def_pos" 17 "jaw_def_pos" 48 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 53 "mouth_lower_lip_def_pos" 42 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 7 "mouth_lower_lip_full_neg" 12 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 165 "mouth_lower_lip_pad_pos" 17 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 41 "mouth_lower_lip_width_neg" 11 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 131 "mouth_philtrum_def_pos" 88 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 53 "mouth_philtrum_shape_pos" 25 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 29 "mouth_philtrum_width_neg" 42 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 116 "mouth_upper_lip_def_pos" 29 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 31 "mouth_upper_lip_full_neg" 13 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 123 "mouth_upper_lip_profile_neg" 28 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 25 "mouth_upper_lip_width_neg" 47 } + gene_bs_nose_forward={ "nose_forward_neg" 17 "nose_forward_neg" 15 } + gene_bs_nose_height={ "nose_height_pos" 169 "nose_height_pos" 45 } + gene_bs_nose_length={ "nose_length_pos" 27 "nose_length_pos" 98 } + gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 63 "nose_nostril_height_neg" 14 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 23 "nose_nostril_width_neg" 15 } + gene_bs_nose_profile={ "nose_profile_pos" 13 "nose_profile_neg" 6 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 35 "nose_ridge_angle_pos" 59 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 31 "nose_ridge_width_neg" 8 } + gene_bs_nose_size={ "nose_size_neg" 49 "nose_size_pos" 62 } + gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 49 "nose_tip_angle_pos" 39 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 43 "nose_tip_forward_neg" 21 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 95 "nose_tip_width_pos" 46 } + face_detail_cheek_def={ "cheek_def_01" 92 "cheek_def_01" 13 } + face_detail_cheek_fat={ "cheek_fat_01_neg" 61 "cheek_fat_04_pos" 78 } + face_detail_chin_cleft={ "chin_dimple" 209 "chin_cleft" 9 } + face_detail_chin_def={ "chin_def" 161 "chin_def_neg" 13 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 25 } + face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 3 } + face_detail_nasolabial={ "nasolabial_03" 0 "nasolabial_03" 10 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 147 "nose_ridge_def_neg" 17 } + face_detail_nose_tip_def={ "nose_tip_def" 89 "nose_tip_def" 16 } + face_detail_temple_def={ "temple_def" 91 "temple_def" 14 } + expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 102 } + expression_eye_wrinkles={ "eye_wrinkles_01" 228 "eye_wrinkles_01" 228 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 85 "forehead_wrinkles_01" 85 } + expression_other={ "cheek_wrinkles_both_01" 51 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_1" 196 "complexion_2" 103 } + gene_height={ "normal_height" 129 "normal_height" 135 } + gene_bs_body_type={ "body_fat_head_fat_medium" 110 "body_fat_head_fat_medium" 143 } + gene_bs_body_shape={ "body_shape_triangle_half" 255 "body_shape_triangle_half" 52 } + gene_bs_bust={ "bust_clothes" 21 "bust_shape_4_half" 64 } + gene_age={ "old_2" 177 "old_2" 177 } + gene_eyebrows_shape={ "avg_spacing_avg_thickness" 136 "far_spacing_avg_thickness" 173 } + gene_eyebrows_fullness={ "layer_2_high_thickness" 195 "layer_2_lower_thickness" 187 } + gene_body_hair={ "body_hair_sparse" 143 "body_hair_sparse" 143 } + gene_hair_type={ "hair_wavy" 184 "hair_wavy" 184 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 138 "normal_eyes" 138 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 232 "normal_eyelashes" 232 } + beards={ "all_beards" 204 "no_beard" 0 } + cloaks={ "no_cloak" 2 "no_cloak" 0 } + hairstyles={ "no_hairstyles" 196 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 191 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "northern_commoner_clothes" 215 "most_clothes" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 807438772 807438772 } + tags={ { + hash=1367985987 + invert=no + } + { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_debbie_lane.txt b/common/bookmark_portraits/historical_export_easteregg_debbie_lane.txt deleted file mode 100644 index 65e3abe6..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_debbie_lane.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_debbie_lane -historical_export_easteregg_debbie_lane={ - type=female - id=16617 - age=0.310000 - genes={ hair_color={ 141 179 0 0 } - skin_color={ 2 0 0 0 } - eye_color={ 121 221 0 0 } - gene_chin_forward={ "chin_forward_pos" 89 "chin_forward_neg" 89 } - gene_chin_height={ "chin_height_neg" 165 "chin_height_neg" 165 } - gene_chin_width={ "chin_width_neg" 127 "chin_width_neg" 127 } - gene_eye_angle={ "eye_angle_neg" 145 "eye_angle_neg" 145 } - gene_eye_depth={ "eye_depth_pos" 89 "eye_depth_neg" 89 } - gene_eye_height={ "eye_height_neg" 89 "eye_height_neg" 89 } - gene_eye_distance={ "eye_distance_neg" 156 "eye_distance_neg" 156 } - gene_eye_shut={ "eye_shut_neg" 107 "eye_shut_neg" 107 } - gene_forehead_angle={ "forehead_angle_neg" 165 "forehead_angle_neg" 165 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 90 "forehead_brow_height_neg" 90 } - gene_forehead_roundness={ "forehead_roundness_pos" 165 "forehead_roundness_neg" 165 } - gene_forehead_width={ "forehead_width_neg" 105 "forehead_width_neg" 105 } - gene_forehead_height={ "forehead_height_pos" 165 "forehead_height_neg" 165 } - gene_head_height={ "head_height_pos" 165 "head_height_neg" 165 } - gene_head_width={ "head_width_neg" 89 "head_width_neg" 89 } - gene_head_profile={ "head_profile_neg" 89 "head_profile_neg" 89 } - gene_head_top_height={ "head_top_height_neg" 89 "head_top_height_neg" 89 } - gene_head_top_width={ "head_top_width_neg" 165 "head_top_width_neg" 165 } - gene_jaw_angle={ "jaw_angle_neg" 89 "jaw_angle_neg" 89 } - gene_jaw_forward={ "jaw_forward_neg" 89 "jaw_forward_neg" 89 } - gene_jaw_height={ "jaw_height_neg" 96 "jaw_height_neg" 96 } - gene_jaw_width={ "jaw_width_neg" 140 "jaw_width_neg" 140 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 132 "mouth_corner_depth_neg" 132 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 135 "mouth_corner_height_neg" 135 } - gene_mouth_forward={ "mouth_forward_neg" 89 "mouth_forward_neg" 89 } - gene_mouth_height={ "mouth_height_neg" 89 "mouth_height_neg" 89 } - gene_mouth_width={ "mouth_width_neg" 163 "mouth_width_neg" 163 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 89 "mouth_upper_lip_size_neg" 89 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 165 "mouth_lower_lip_size_neg" 165 } - gene_mouth_open={ "mouth_open_neg" 89 "mouth_open_neg" 89 } - gene_neck_length={ "neck_length_neg" 95 "neck_length_neg" 95 } - gene_neck_width={ "neck_width_neg" 98 "neck_width_neg" 98 } - gene_bs_cheek_forward={ "cheek_forward_pos" 89 "cheek_forward_neg" 127 } - gene_bs_cheek_height={ "cheek_height_neg" 119 "cheek_height_neg" 127 } - gene_bs_cheek_width={ "cheek_width_pos" 40 "cheek_width_neg" 127 } - gene_bs_ear_angle={ "ear_angle_pos" 152 "ear_angle_neg" 127 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 114 "ear_inner_shape_pos" 127 } - gene_bs_ear_bend={ "ear_lower_bend_pos" 76 "ear_lower_bend_pos" 127 } - gene_bs_ear_outward={ "ear_outward_neg" 173 "ear_outward_neg" 127 } - gene_bs_ear_size={ "ear_size_pos" 112 "ear_size_neg" 127 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 127 "eye_corner_depth_neg" 127 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 0 "eye_fold_shape_neg" 127 } - gene_bs_eye_size={ "eye_size_pos" 71 "eye_size_neg" 127 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 147 "eye_upper_lid_size_neg" 127 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 0 "forehead_brow_curve_neg" 127 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 100 "forehead_brow_forward_neg" 127 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 70 "forehead_brow_inner_height_neg" 127 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 255 "forehead_brow_outer_height_neg" 127 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 1 "forehead_brow_width_neg" 127 } - gene_bs_jaw_def={ "jaw_def_neg" 50 "jaw_def_neg" 127 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 14 "mouth_lower_lip_def_pos" 127 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 12 "mouth_lower_lip_full_neg" 127 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 0 "mouth_lower_lip_pad_neg" 127 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 181 "mouth_lower_lip_width_neg" 127 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 28 "mouth_philtrum_def_pos" 127 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 33 "mouth_philtrum_shape_neg" 127 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 98 "mouth_philtrum_width_neg" 127 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 197 "mouth_upper_lip_def_pos" 127 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 62 "mouth_upper_lip_full_neg" 127 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 11 "mouth_upper_lip_profile_neg" 127 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 197 "mouth_upper_lip_width_neg" 127 } - gene_bs_nose_forward={ "nose_forward_neg" 0 "nose_forward_neg" 127 } - gene_bs_nose_height={ "nose_height_neg" 243 "nose_height_neg" 127 } - gene_bs_nose_length={ "nose_length_pos" 182 "nose_length_neg" 127 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 141 "nose_nostril_height_neg" 127 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 110 "nose_nostril_width_neg" 127 } - gene_bs_nose_profile={ "nose_profile_neg" 31 "nose_profile_neg" 127 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 118 "nose_ridge_angle_neg" 127 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 44 "nose_ridge_width_neg" 127 } - gene_bs_nose_size={ "nose_size_neg" 253 "nose_size_neg" 127 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 57 "nose_tip_angle_neg" 127 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 39 "nose_tip_forward_neg" 127 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 132 "nose_tip_width_neg" 127 } - face_detail_cheek_def={ "cheek_def_02" 1 "cheek_def_01" 127 } - face_detail_cheek_fat={ "cheek_fat_04_pos" 2 "cheek_fat_01_pos" 127 } - face_detail_chin_cleft={ "chin_dimple" 0 "chin_cleft" 127 } - face_detail_chin_def={ "chin_def" 6 "chin_def" 127 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 152 "eye_lower_lid_def" 127 } - face_detail_eye_socket={ "eye_socket_02" 100 "eye_socket_01" 127 } - face_detail_nasolabial={ "nasolabial_03" 1 "nasolabial_01" 127 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 2 "nose_ridge_def_pos" 127 } - face_detail_nose_tip_def={ "nose_tip_def" 1 "nose_tip_def" 127 } - face_detail_temple_def={ "temple_def" 255 "temple_def" 127 } - expression_brow_wrinkles={ "brow_wrinkles_04" 1 "brow_wrinkles_01" 127 } - expression_eye_wrinkles={ "eye_wrinkles_02" 255 "eye_wrinkles_01" 127 } - expression_forehead_wrinkles={ "forehead_wrinkles_03" 0 "forehead_wrinkles_01" 127 } - expression_other={ "cheek_wrinkles_both_01" 110 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_beauty_1" 255 "complexion_1" 127 } - gene_height={ "full_height" 154 "full_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_low" 147 "body_average" 140 } - gene_bs_body_shape={ "body_shape_average_clothed" 38 "body_shape_average_clothed" 127 } - gene_bs_bust={ "bust_clothes" 2 "bust_clothes" 127 } - gene_age={ "old_beauty_1" 79 "old_1" 127 } - gene_eyebrows_shape={ "far_spacing_lower_thickness" 233 "no_eyebrows" 127 } - gene_eyebrows_fullness={ "layer_2_lower_thickness" 223 "no_eyebrows" 127 } - gene_body_hair={ "body_hair_sparse" 16 "body_hair_sparse" 127 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 11 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 253 "no_eyelashes" 0 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 155 "all_hairstyles" 0 } - cloaks={ "no_cloak" 133 "no_cloak" 0 } - clothes={ "northern_low_nobility_clothes" 25 "most_clothes" 0 } - headgear={ "no_headgear" 133 "no_headgear" 0 } - legwear={ "western_common_legwear" 105 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_elena_zenko.txt b/common/bookmark_portraits/historical_export_easteregg_elena_zenko.txt deleted file mode 100644 index ce2f5705..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_elena_zenko.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_elena_zenko -historical_export_easteregg_elena_zenko={ - type=female - id=18597 - age=0.280000 - genes={ hair_color={ 121 93 127 121 } - skin_color={ 133 47 98 90 } - eye_color={ 255 76 29 168 } - gene_chin_forward={ "chin_forward_pos" 140 "chin_forward_pos" 140 } - gene_chin_height={ "chin_height_pos" 123 "chin_height_pos" 123 } - gene_chin_width={ "chin_width_pos" 135 "chin_width_pos" 135 } - gene_eye_angle={ "eye_angle_pos" 145 "eye_angle_pos" 145 } - gene_eye_depth={ "eye_depth_pos" 151 "eye_depth_pos" 151 } - gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 109 "eye_distance_pos" 109 } - gene_eye_shut={ "eye_shut_pos" 116 "eye_shut_pos" 116 } - gene_forehead_angle={ "forehead_angle_pos" 127 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 127 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 153 "forehead_roundness_pos" 153 } - gene_forehead_width={ "forehead_width_pos" 124 "forehead_width_pos" 124 } - gene_forehead_height={ "forehead_height_pos" 127 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 127 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 102 "head_width_pos" 102 } - gene_head_profile={ "head_profile_pos" 127 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 102 "jaw_angle_pos" 102 } - gene_jaw_forward={ "jaw_forward_pos" 102 "jaw_forward_pos" 102 } - gene_jaw_height={ "jaw_height_pos" 153 "jaw_height_pos" 153 } - gene_jaw_width={ "jaw_width_pos" 116 "jaw_width_pos" 116 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 153 "mouth_corner_depth_pos" 153 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 117 "mouth_corner_height_pos" 117 } - gene_mouth_forward={ "mouth_forward_pos" 153 "mouth_forward_pos" 153 } - gene_mouth_height={ "mouth_height_pos" 102 "mouth_height_pos" 102 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 102 "mouth_upper_lip_size_pos" 102 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 152 "mouth_lower_lip_size_pos" 152 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 127 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 1 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 103 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 169 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 16 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 79 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 164 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 142 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 72 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 85 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 150 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 0 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 0 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 146 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 98 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 73 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 188 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 2 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 215 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 142 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 53 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 76 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 114 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 1 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 1 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 110 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 38 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 3 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 85 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 154 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 30 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 1 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 2 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def_neg" 214 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 116 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_color_02" 44 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_04" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 196 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 150 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_03" 140 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_beauty_1" 255 "complexion_1" 0 } - gene_height={ "normal_height" 178 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 104 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average" 61 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 124 "bust_clothes" 127 } - gene_age={ "old_1" 2 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 151 "avg_spacing_avg_thickness" 230 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 126 "layer_2_avg_thickness" 72 } - gene_body_hair={ "body_hair_sparse" 122 "body_hair_sparse" 122 } - gene_hair_type={ "hair_straight" 135 "hair_straight" 135 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - clothes={ "northern_commoner_clothes" 246 "most_clothes" 0 } - headgear={ "no_headgear" 179 "no_headgear" 0 } - legwear={ "western_common_legwear" 16 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 130 "all_hairstyles" 0 } - } - entity={ 2697330347 2697330347 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_elisabeth_gangenes.txt b/common/bookmark_portraits/historical_export_easteregg_elisabeth_gangenes.txt deleted file mode 100644 index c72f84b3..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_elisabeth_gangenes.txt +++ /dev/null @@ -1,122 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_elisabeth_gangenes -historical_export_easteregg_elisabeth_gangenes={ - type=female - id=18445 - age=0.290000 - genes={ hair_color={ 4 254 33 242 } - skin_color={ 100 169 175 169 } - eye_color={ 60 245 60 245 } - gene_chin_forward={ "chin_forward_neg" 122 "chin_forward_neg" 122 } - gene_chin_height={ "chin_height_neg" 118 "chin_height_neg" 118 } - gene_chin_width={ "chin_width_neg" 136 "chin_width_neg" 124 } - gene_eye_angle={ "eye_angle_neg" 124 "eye_angle_neg" 124 } - gene_eye_depth={ "eye_depth_pos" 123 "eye_depth_pos" 149 } - gene_eye_height={ "eye_height_neg" 99 "eye_height_neg" 91 } - gene_eye_distance={ "eye_distance_neg" 130 "eye_distance_neg" 121 } - gene_eye_shut={ "eye_shut_neg" 146 "eye_shut_neg" 109 } - gene_forehead_angle={ "forehead_angle_neg" 55 "forehead_angle_neg" 56 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 144 "forehead_brow_height_neg" 118 } - gene_forehead_roundness={ "forehead_roundness_pos" 143 "forehead_roundness_pos" 143 } - gene_forehead_width={ "forehead_width_pos" 147 "forehead_width_pos" 153 } - gene_forehead_height={ "forehead_height_neg" 88 "forehead_height_neg" 106 } - gene_head_height={ "head_height_neg" 167 "head_height_neg" 116 } - gene_head_width={ "head_width_neg" 107 "head_width_neg" 119 } - gene_head_profile={ "head_profile_pos" 156 "head_profile_pos" 148 } - gene_head_top_height={ "head_top_height_neg" 112 "head_top_height_neg" 104 } - gene_head_top_width={ "head_top_width_pos" 181 "head_top_width_pos" 190 } - gene_jaw_angle={ "jaw_angle_pos" 99 "jaw_angle_pos" 131 } - gene_jaw_forward={ "jaw_forward_pos" 128 "jaw_forward_pos" 136 } - gene_jaw_height={ "jaw_height_neg" 78 "jaw_height_neg" 122 } - gene_jaw_width={ "jaw_width_neg" 92 "jaw_width_neg" 78 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 135 "mouth_corner_depth_pos" 129 } - gene_mouth_corner_height={ "mouth_corner_height_neg" 144 "mouth_corner_height_neg" 118 } - gene_mouth_forward={ "mouth_forward_pos" 160 "mouth_forward_pos" 153 } - gene_mouth_height={ "mouth_height_pos" 133 "mouth_height_pos" 151 } - gene_mouth_width={ "mouth_width_pos" 106 "mouth_width_pos" 140 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 145 "mouth_upper_lip_size_neg" 115 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 134 "mouth_lower_lip_size_pos" 171 } - gene_mouth_open={ "mouth_open_neg" 83 "mouth_open_neg" 116 } - gene_neck_length={ "neck_length_pos" 163 "neck_length_pos" 152 } - gene_neck_width={ "neck_width_neg" 65 "neck_width_neg" 106 } - gene_bs_cheek_forward={ "cheek_forward_pos" 57 "cheek_forward_pos" 38 } - gene_bs_cheek_height={ "cheek_height_pos" 175 "cheek_height_neg" 24 } - gene_bs_cheek_width={ "cheek_width_neg" 1 "cheek_width_pos" 36 } - gene_bs_ear_angle={ "ear_angle_pos" 211 "ear_angle_pos" 99 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 16 "ear_inner_shape_pos" 29 } - gene_bs_ear_bend={ "ear_both_bend_pos" 66 "ear_lower_bend_pos" 118 } - gene_bs_ear_outward={ "ear_outward_pos" 44 "ear_outward_pos" 44 } - gene_bs_ear_size={ "ear_size_neg" 37 "ear_size_neg" 40 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 45 "eye_corner_depth_neg" 64 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 69 "eye_fold_shape_pos" 54 } - gene_bs_eye_size={ "eye_size_neg" 19 "eye_size_pos" 7 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 125 "eye_upper_lid_size_pos" 90 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 27 "forehead_brow_curve_neg" 43 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 101 "forehead_brow_forward_neg" 12 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 43 "forehead_brow_inner_height_neg" 43 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 109 "forehead_brow_outer_height_pos" 80 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 19 "forehead_brow_width_pos" 47 } - gene_bs_jaw_def={ "jaw_def_pos" 47 "jaw_def_pos" 11 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 86 "mouth_lower_lip_def_pos" 71 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 37 "mouth_lower_lip_full_pos" 23 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 41 "mouth_lower_lip_pad_neg" 91 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 49 "mouth_lower_lip_width_pos" 114 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 26 "mouth_philtrum_def_pos" 51 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 97 "mouth_philtrum_shape_neg" 73 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 45 "mouth_philtrum_width_pos" 26 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 49 "mouth_upper_lip_def_pos" 40 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 45 "mouth_upper_lip_full_pos" 13 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 49 "mouth_upper_lip_profile_pos" 89 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 63 "mouth_upper_lip_width_neg" 108 } - gene_bs_nose_forward={ "nose_forward_neg" 25 "nose_forward_neg" 65 } - gene_bs_nose_height={ "nose_height_neg" 33 "nose_height_neg" 56 } - gene_bs_nose_length={ "nose_length_pos" 31 "nose_length_neg" 122 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 109 "nose_nostril_height_neg" 114 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 33 "nose_nostril_width_neg" 37 } - gene_bs_nose_profile={ "nose_profile_neg" 59 "nose_profile_neg" 4 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 19 "nose_ridge_angle_pos" 56 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 73 "nose_ridge_width_neg" 3 } - gene_bs_nose_size={ "nose_size_pos" 49 "nose_size_neg" 23 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 33 "nose_tip_angle_pos" 45 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 198 "nose_tip_forward_neg" 198 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 19 "nose_tip_width_neg" 2 } - face_detail_cheek_def={ "cheek_def_01" 42 "cheek_def_01" 105 } - face_detail_cheek_fat={ "cheek_fat_03_pos" 77 "cheek_fat_03_pos" 6 } - face_detail_chin_cleft={ "chin_cleft" 36 "chin_cleft" 4 } - face_detail_chin_def={ "chin_def" 69 "chin_def" 18 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 142 "eye_lower_lid_def" 108 } - face_detail_eye_socket={ "eye_socket_03" 49 "eye_socket_03" 19 } - face_detail_nasolabial={ "nasolabial_01" 11 "nasolabial_01" 11 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 150 "nose_ridge_def_neg" 4 } - face_detail_nose_tip_def={ "nose_tip_def" 38 "nose_tip_def" 30 } - face_detail_temple_def={ "temple_def" 38 "temple_def" 24 } - expression_brow_wrinkles={ "brow_wrinkles_01" 2 "brow_wrinkles_01" 2 } - expression_eye_wrinkles={ "eye_wrinkles_01" 216 "eye_wrinkles_01" 21 } - expression_forehead_wrinkles={ "forehead_wrinkles_02" 138 "forehead_wrinkles_02" 138 } - expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_5" 0 "complexion_5" 0 } - gene_height={ "normal_height" 170 "normal_height" 155 } - gene_bs_body_type={ "body_fat_head_fat_medium" 147 "body_fat_head_fat_full" 136 } - gene_bs_body_shape={ "body_shape_average_clothed" 101 "body_shape_triangle_half" 0 } - gene_bs_bust={ "bust_clothes" 217 "bust_shape_2_full" 127 } - gene_age={ "old_4" 93 "old_4" 93 } - gene_eyebrows_shape={ "far_spacing_low_thickness" 171 "far_spacing_low_thickness" 171 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 236 "layer_2_avg_thickness" 203 } - gene_body_hair={ "body_hair_avg" 162 "body_hair_avg" 162 } - gene_hair_type={ "hair_afro" 113 "hair_afro" 113 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 100 "normal_eyes" 100 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 39 "normal_eyelashes" 39 } - pose={ "" 255 "" 0 } - cloaks={ "fp1_cloak" 0 "no_cloak" 0 } - gene_bs_cloak={ "cloak" 255 "no_cloak" 0 } - clothes={ "fp1_high_nobility_clothes" 255 "most_clothes" 0 } - headgear={ "no_headgear" 102 "no_headgear" 0 } - legwear={ "western_common_legwear" 137 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 219 "all_hairstyles" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_emil_tisander.txt b/common/bookmark_portraits/historical_export_easteregg_emil_tisander.txt index a2b6e658..01522ba7 100644 --- a/common/bookmark_portraits/historical_export_easteregg_emil_tisander.txt +++ b/common/bookmark_portraits/historical_export_easteregg_emil_tisander.txt @@ -2,7 +2,8 @@ # History database id:easteregg_emil_tisander historical_export_easteregg_emil_tisander={ type=male - id=16511 + id=19021 + random_seed=14471759 age=0.310000 genes={ hair_color={ 184 251 129 121 } skin_color={ 1 43 7 68 } @@ -91,30 +92,60 @@ historical_export_easteregg_emil_tisander={ face_detail_nose_tip_def={ "nose_tip_def" 192 "nose_tip_def" 0 } face_detail_temple_def={ "temple_def" 47 "temple_def" 0 } expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 55 "eye_wrinkles_01" 0 } + expression_eye_wrinkles={ "eye_wrinkles_01" 54 "eye_wrinkles_01" 0 } expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } expression_other={ "nose_wrinkles_01" 124 "cheek_wrinkles_left_01" 127 } complexion={ "complexion_1" 233 "complexion_1" 0 } gene_height={ "normal_height" 158 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_low" 85 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 20 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 127 "bust_clothes" 127 } + gene_bs_body_type={ "body_fat_head_fat_low" 79 "body_fat_head_fat_medium" 127 } + gene_bs_body_shape={ "body_shape_average" 15 "body_shape_average" 0 } + gene_bs_bust={ "bust_clothes" 101 "bust_clothes" 127 } gene_age={ "old_2" 0 "old_1" 0 } gene_eyebrows_shape={ "avg_spacing_low_thickness" 202 "avg_spacing_avg_thickness" 144 } gene_eyebrows_fullness={ "layer_2_low_thickness" 155 "layer_2_avg_thickness" 67 } gene_body_hair={ "body_hair_sparse" 43 "body_hair_sparse" 172 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } + gene_hair_type={ "hair_straight" 128 "hair_straight" 128 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } + cloaks={ "no_cloak" 59 "no_cloak" 0 } hairstyles={ "scripted_character_hairstyles_01" 145 "all_hairstyles" 0 } - cloaks={ "no_cloak" 55 "no_cloak" 0 } - clothes={ "fp1_commoner_clothes" 210 "most_clothes" 0 } - headgear={ "no_headgear" 55 "no_headgear" 0 } - legwear={ "western_common_legwear" 143 "all_legwear" 0 } + legwear={ "western_common_legwear" 128 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "northern_war_nobility_clothes" 126 "most_clothes" 0 } + beards={ "no_beard" 28 "no_beard" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } } entity={ 2697330347 2697330347 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=2842715111 + invert=no + } + { + hash=1945936758 + invert=no + } + } } diff --git a/common/bookmark_portraits/historical_export_easteregg_fabian_franzen.txt b/common/bookmark_portraits/historical_export_easteregg_fabian_franzen.txt new file mode 100644 index 00000000..69ba3c62 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_fabian_franzen.txt @@ -0,0 +1,159 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_fabian_franzen +historical_export_easteregg_fabian_franzen={ + type=male + id=20378 + random_seed=3472237134 + age=0.220000 + genes={ hair_color={ 159 208 39 249 } + skin_color={ 43 70 43 70 } + eye_color={ 203 214 86 166 } + gene_chin_forward={ "chin_forward_pos" 148 "chin_forward_pos" 148 } + gene_chin_height={ "chin_height_pos" 132 "chin_height_pos" 139 } + gene_chin_width={ "chin_width_neg" 132 "chin_width_neg" 121 } + gene_eye_angle={ "eye_angle_pos" 96 "eye_angle_pos" 140 } + gene_eye_depth={ "eye_depth_pos" 80 "eye_depth_pos" 137 } + gene_eye_height={ "eye_height_pos" 120 "eye_height_pos" 139 } + gene_eye_distance={ "eye_distance_neg" 102 "eye_distance_neg" 102 } + gene_eye_shut={ "eye_shut_pos" 144 "eye_shut_pos" 144 } + gene_forehead_angle={ "forehead_angle_neg" 114 "forehead_angle_neg" 112 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 105 "forehead_brow_height_neg" 105 } + gene_forehead_roundness={ "forehead_roundness_pos" 223 "forehead_roundness_pos" 227 } + gene_forehead_width={ "forehead_width_pos" 150 "forehead_width_pos" 150 } + gene_forehead_height={ "forehead_height_neg" 180 "forehead_height_neg" 111 } + gene_head_height={ "head_height_neg" 172 "head_height_neg" 106 } + gene_head_width={ "head_width_pos" 167 "head_width_pos" 167 } + gene_head_profile={ "head_profile_pos" 176 "head_profile_pos" 176 } + gene_head_top_height={ "head_top_height_neg" 142 "head_top_height_neg" 117 } + gene_head_top_width={ "head_top_width_pos" 168 "head_top_width_pos" 168 } + gene_jaw_angle={ "jaw_angle_neg" 115 "jaw_angle_neg" 108 } + gene_jaw_forward={ "jaw_forward_neg" 163 "jaw_forward_neg" 122 } + gene_jaw_height={ "jaw_height_pos" 123 "jaw_height_pos" 134 } + gene_jaw_width={ "jaw_width_neg" 118 "jaw_width_neg" 118 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 131 "mouth_corner_depth_pos" 131 } + gene_mouth_corner_height={ "mouth_corner_height_neg" 119 "mouth_corner_height_neg" 119 } + gene_mouth_forward={ "mouth_forward_neg" 117 "mouth_forward_neg" 117 } + gene_mouth_height={ "mouth_height_pos" 134 "mouth_height_pos" 134 } + gene_mouth_width={ "mouth_width_neg" 72 "mouth_width_neg" 72 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 124 "mouth_upper_lip_size_neg" 124 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 111 "mouth_lower_lip_size_neg" 111 } + gene_mouth_open={ "mouth_open_neg" 77 "mouth_open_neg" 77 } + gene_neck_length={ "neck_length_pos" 85 "neck_length_pos" 148 } + gene_neck_width={ "neck_width_neg" 137 "neck_width_neg" 117 } + gene_bs_cheek_forward={ "cheek_forward_neg" 19 "cheek_forward_neg" 9 } + gene_bs_cheek_height={ "cheek_height_neg" 81 "cheek_height_pos" 41 } + gene_bs_cheek_width={ "cheek_width_neg" 213 "cheek_width_pos" 26 } + gene_bs_ear_angle={ "ear_angle_neg" 43 "ear_angle_neg" 2 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 48 "ear_inner_shape_pos" 48 } + gene_bs_ear_bend={ "ear_both_bend_pos" 26 "ear_both_bend_pos" 19 } + gene_bs_ear_outward={ "ear_outward_pos" 109 "ear_outward_neg" 40 } + gene_bs_ear_size={ "ear_size_pos" 57 "ear_size_neg" 34 } + gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 29 "eye_corner_depth_neg" 57 } + gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 41 "eye_fold_shape_neg" 18 } + gene_bs_eye_size={ "eye_size_neg" 87 "eye_size_neg" 25 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 35 "eye_upper_lid_size_neg" 49 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 43 "forehead_brow_curve_neg" 110 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 19 "forehead_brow_forward_pos" 19 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 118 "forehead_brow_inner_height_pos" 118 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 107 "forehead_brow_outer_height_pos" 11 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 155 "forehead_brow_width_neg" 0 } + gene_bs_jaw_def={ "jaw_def_neg" 255 "jaw_def_pos" 166 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 96 "mouth_lower_lip_def_pos" 96 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 160 "mouth_lower_lip_pad_neg" 160 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 104 "mouth_lower_lip_width_pos" 104 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 11 "mouth_philtrum_def_pos" 11 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 24 "mouth_philtrum_shape_neg" 24 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 26 "mouth_philtrum_width_pos" 26 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 36 "mouth_upper_lip_def_pos" 36 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 14 "mouth_upper_lip_full_neg" 14 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 9 "mouth_upper_lip_profile_neg" 9 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 21 "mouth_upper_lip_width_pos" 21 } + gene_bs_nose_forward={ "nose_forward_pos" 77 "nose_forward_pos" 76 } + gene_bs_nose_height={ "nose_height_pos" 79 "nose_height_pos" 124 } + gene_bs_nose_length={ "nose_length_pos" 33 "nose_length_neg" 111 } + gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 49 "nose_nostril_height_neg" 98 } + gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 21 "nose_nostril_width_neg" 49 } + gene_bs_nose_profile={ "nose_profile_pos" 91 "nose_profile_pos" 8 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 29 "nose_ridge_angle_pos" 29 } + gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 3 "nose_ridge_width_neg" 90 } + gene_bs_nose_size={ "nose_size_pos" 77 "nose_size_pos" 25 } + gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 1 "nose_tip_angle_pos" 2 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 39 "nose_tip_forward_neg" 113 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 67 "nose_tip_width_neg" 8 } + face_detail_cheek_def={ "cheek_def_01" 141 "cheek_def_01" 141 } + face_detail_cheek_fat={ "cheek_fat_03_pos" 0 "cheek_fat_03_pos" 4 } + face_detail_chin_cleft={ "chin_dimple" 0 "chin_dimple" 20 } + face_detail_chin_def={ "chin_def_neg" 255 "chin_def_neg" 100 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 155 "eye_lower_lid_def" 239 } + face_detail_eye_socket={ "eye_socket_02" 168 "eye_socket_color_01" 10 } + face_detail_nasolabial={ "nasolabial_03" 36 "nasolabial_03" 13 } + face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 15 } + face_detail_nose_tip_def={ "nose_tip_def" 133 "nose_tip_def" 176 } + face_detail_temple_def={ "temple_def" 97 "temple_def" 97 } + expression_brow_wrinkles={ "brow_wrinkles_03" 52 "brow_wrinkles_03" 52 } + expression_eye_wrinkles={ "eye_wrinkles_01" 9 "eye_wrinkles_01" 9 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 173 "forehead_wrinkles_01" 173 } + expression_other={ "cheek_wrinkles_both_01" 51 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_5" 77 "complexion_5" 77 } + gene_height={ "normal_height" 142 "normal_height" 127 } + gene_bs_body_type={ "body_fat_head_fat_medium" 163 "body_fat_head_fat_low" 119 } + gene_bs_body_shape={ "body_shape_apple_half" 187 "body_shape_apple_half" 45 } + gene_bs_bust={ "bust_clothes" 155 "bust_shape_4_half" 243 } + gene_age={ "old_4" 145 "old_4" 145 } + gene_eyebrows_shape={ "avg_spacing_lower_thickness" 244 "far_spacing_lower_thickness" 180 } + gene_eyebrows_fullness={ "layer_2_avg_thickness" 242 "layer_2_avg_thickness" 103 } + gene_body_hair={ "body_hair_avg" 95 "body_hair_avg" 95 } + gene_hair_type={ "hair_straight" 178 "hair_straight" 178 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 14 "normal_eyes" 14 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 41 "normal_eyelashes" 41 } + beards={ "western_beards_straight" 80 "no_beard" 0 } + cloaks={ "no_cloak" 149 "no_cloak" 0 } + hairstyles={ "western_hairstyles_straight" 80 "all_hairstyles" 0 } + legwear={ "fp1_common_legwear" 98 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "ep2_western_era2_war_nobility_clothes" 126 "most_clothes" 0 } + headgear={ "ep2_western_era2_war_nobility" 229 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 3293488942 3293488942 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=2495432340 + invert=no + } + { + hash=1921638387 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=1219709797 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_fei_berg_hulthen.txt b/common/bookmark_portraits/historical_export_easteregg_fei_berg_hulthen.txt deleted file mode 100644 index f793d5a4..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_fei_berg_hulthen.txt +++ /dev/null @@ -1,121 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_fei_berg_hulthen -historical_export_easteregg_fei_berg_hulthen={ - type=male - id=19589 - age=0.210000 - genes={ hair_color={ 70 252 42 243 } - skin_color={ 135 77 222 113 } - eye_color={ 52 251 52 251 } - gene_chin_forward={ "chin_forward_neg" 132 "chin_forward_neg" 124 } - gene_chin_height={ "chin_height_pos" 76 "chin_height_pos" 130 } - gene_chin_width={ "chin_width_pos" 94 "chin_width_pos" 129 } - gene_eye_angle={ "eye_angle_pos" 147 "eye_angle_pos" 134 } - gene_eye_depth={ "eye_depth_neg" 165 "eye_depth_neg" 100 } - gene_eye_height={ "eye_height_neg" 91 "eye_height_neg" 116 } - gene_eye_distance={ "eye_distance_pos" 107 "eye_distance_pos" 136 } - gene_eye_shut={ "eye_shut_pos" 174 "eye_shut_pos" 147 } - gene_forehead_angle={ "forehead_angle_pos" 83 "forehead_angle_pos" 147 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 179 "forehead_brow_height_pos" 147 } - gene_forehead_roundness={ "forehead_roundness_neg" 159 "forehead_roundness_neg" 92 } - gene_forehead_width={ "forehead_width_neg" 51 "forehead_width_neg" 113 } - gene_forehead_height={ "forehead_height_neg" 66 "forehead_height_neg" 94 } - gene_head_height={ "head_height_neg" 106 "head_height_neg" 90 } - gene_head_width={ "head_width_neg" 162 "head_width_neg" 115 } - gene_head_profile={ "head_profile_neg" 159 "head_profile_neg" 73 } - gene_head_top_height={ "head_top_height_neg" 130 "head_top_height_neg" 115 } - gene_head_top_width={ "head_top_width_pos" 133 "head_top_width_pos" 128 } - gene_jaw_angle={ "jaw_angle_neg" 47 "jaw_angle_neg" 118 } - gene_jaw_forward={ "jaw_forward_neg" 122 "jaw_forward_neg" 75 } - gene_jaw_height={ "jaw_height_pos" 110 "jaw_height_pos" 136 } - gene_jaw_width={ "jaw_width_neg" 131 "jaw_width_neg" 79 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 0 "mouth_corner_depth_neg" 117 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 104 "mouth_corner_height_pos" 135 } - gene_mouth_forward={ "mouth_forward_pos" 87 "mouth_forward_pos" 134 } - gene_mouth_height={ "mouth_height_neg" 148 "mouth_height_neg" 105 } - gene_mouth_width={ "mouth_width_pos" 130 "mouth_width_neg" 82 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 130 "mouth_upper_lip_size_pos" 153 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 86 "mouth_lower_lip_size_neg" 123 } - gene_mouth_open={ "mouth_open_pos" 0 "mouth_open_pos" 146 } - gene_neck_length={ "neck_length_pos" 142 "neck_length_pos" 144 } - gene_neck_width={ "neck_width_neg" 80 "neck_width_neg" 125 } - gene_bs_cheek_forward={ "cheek_forward_pos" 0 "cheek_forward_pos" 51 } - gene_bs_cheek_height={ "cheek_height_pos" 195 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 50 "cheek_width_pos" 46 } - gene_bs_ear_angle={ "ear_angle_pos" 147 "ear_angle_neg" 3 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 56 "ear_inner_shape_pos" 171 } - gene_bs_ear_bend={ "ear_upper_bend_pos" 96 "ear_lower_bend_pos" 35 } - gene_bs_ear_outward={ "ear_outward_neg" 109 "ear_outward_pos" 17 } - gene_bs_ear_size={ "ear_size_neg" 25 "ear_size_pos" 27 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 255 "eye_corner_depth_neg" 191 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 123 "eye_fold_shape_neg" 48 } - gene_bs_eye_size={ "eye_size_pos" 43 "eye_size_neg" 1 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 108 "eye_upper_lid_size_neg" 236 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 9 "forehead_brow_curve_neg" 62 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 131 "forehead_brow_forward_pos" 92 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 49 "forehead_brow_inner_height_pos" 27 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 87 "forehead_brow_outer_height_neg" 79 } - gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 71 "forehead_brow_width_pos" 89 } - gene_bs_jaw_def={ "jaw_def_pos" 10 "jaw_def_neg" 169 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 255 "mouth_lower_lip_def_pos" 77 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 125 "mouth_lower_lip_full_neg" 26 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 255 "mouth_lower_lip_pad_pos" 34 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 79 "mouth_lower_lip_width_pos" 74 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 14 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 75 "mouth_philtrum_shape_pos" 33 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 147 "mouth_philtrum_width_neg" 27 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 255 "mouth_upper_lip_def_pos" 10 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 87 "mouth_upper_lip_full_pos" 24 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 255 "mouth_upper_lip_profile_neg" 32 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 13 "mouth_upper_lip_width_neg" 28 } - gene_bs_nose_forward={ "nose_forward_neg" 131 "nose_forward_neg" 8 } - gene_bs_nose_height={ "nose_height_neg" 121 "nose_height_pos" 126 } - gene_bs_nose_length={ "nose_length_neg" 103 "nose_length_neg" 54 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 5 "nose_nostril_height_neg" 3 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 255 "nose_nostril_width_neg" 7 } - gene_bs_nose_profile={ "nose_profile_neg" 53 "nose_profile_pos" 86 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 149 "nose_ridge_angle_pos" 99 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 105 "nose_ridge_width_neg" 5 } - gene_bs_nose_size={ "nose_size_pos" 229 "nose_size_pos" 3 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 99 "nose_tip_angle_neg" 83 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 227 "nose_tip_forward_neg" 169 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 41 "nose_tip_width_neg" 20 } - face_detail_cheek_def={ "cheek_def_01" 1 "cheek_def_02" 24 } - face_detail_cheek_fat={ "cheek_fat_04_pos" 126 "cheek_fat_01_neg" 23 } - face_detail_chin_cleft={ "chin_dimple" 0 "chin_cleft" 7 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 24 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 21 "eye_lower_lid_def" 9 } - face_detail_eye_socket={ "eye_socket_color_03" 21 "eye_socket_03" 229 } - face_detail_nasolabial={ "nasolabial_03" 255 "nasolabial_02" 21 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 255 "nose_ridge_def_neg" 240 } - face_detail_nose_tip_def={ "nose_tip_def" 226 "nose_tip_def" 24 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 89 } - expression_brow_wrinkles={ "brow_wrinkles_01" 15 "brow_wrinkles_01" 166 } - expression_eye_wrinkles={ "eye_wrinkles_01" 191 "eye_wrinkles_01" 28 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 114 "forehead_wrinkles_01" 150 } - expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_3" 255 "complexion_1" 253 } - gene_height={ "normal_height" 113 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_low" 45 "body_fat_head_fat_low" 100 } - gene_bs_body_shape={ "body_shape_rectangle_half" 255 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 0 "bust_shape_2_half" 105 } - gene_age={ "old_4" 216 "old_4" 216 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 219 "far_spacing_low_thickness" 219 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 225 "layer_2_low_thickness" 225 } - gene_body_hair={ "body_hair_sparse_low_stubble" 255 "body_hair_sparse_low_stubble" 255 } - gene_hair_type={ "hair_wavy" 131 "hair_wavy" 131 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 163 "normal_eyes" 163 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "asian_eyelashes" 144 "asian_eyelashes" 144 } - pose={ "" 255 "" 0 } - clothes={ "most_clothes" 110 "most_clothes" 0 } - cloaks={ "fp1_cloak" 170 "no_cloak" 0 } - headgear={ "no_headgear" 220 "no_headgear" 0 } - legwear={ "western_common_legwear" 31 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 0 "all_hairstyles" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_hanna_lohman.txt b/common/bookmark_portraits/historical_export_easteregg_hanna_lohman.txt deleted file mode 100644 index dc767260..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_hanna_lohman.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_hanna_lohman -historical_export_easteregg_hanna_lohman={ - type=female - id=16618 - age=0.310000 - genes={ hair_color={ 220 174 223 24 } - skin_color={ 15 14 122 99 } - eye_color={ 229 85 224 160 } - gene_chin_forward={ "chin_forward_neg" 169 "chin_forward_neg" 116 } - gene_chin_height={ "chin_height_pos" 138 "chin_height_pos" 138 } - gene_chin_width={ "chin_width_neg" 183 "chin_width_neg" 122 } - gene_eye_angle={ "eye_angle_pos" 140 "eye_angle_pos" 132 } - gene_eye_depth={ "eye_depth_pos" 58 "eye_depth_neg" 121 } - gene_eye_height={ "eye_height_pos" 193 "eye_height_pos" 130 } - gene_eye_distance={ "eye_distance_neg" 96 "eye_distance_neg" 101 } - gene_eye_shut={ "eye_shut_pos" 89 "eye_shut_pos" 128 } - gene_forehead_angle={ "forehead_angle_pos" 255 "forehead_angle_neg" 122 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 142 "forehead_brow_height_pos" 170 } - gene_forehead_roundness={ "forehead_roundness_neg" 187 "forehead_roundness_neg" 89 } - gene_forehead_width={ "forehead_width_neg" 158 "forehead_width_neg" 110 } - gene_forehead_height={ "forehead_height_pos" 178 "forehead_height_pos" 144 } - gene_head_height={ "head_height_neg" 98 "head_height_neg" 109 } - gene_head_width={ "head_width_neg" 30 "head_width_neg" 106 } - gene_head_profile={ "head_profile_neg" 123 "head_profile_neg" 79 } - gene_head_top_height={ "head_top_height_neg" 127 "head_top_height_neg" 115 } - gene_head_top_width={ "head_top_width_pos" 148 "head_top_width_pos" 148 } - gene_jaw_angle={ "jaw_angle_neg" 152 "jaw_angle_neg" 117 } - gene_jaw_forward={ "jaw_forward_neg" 44 "jaw_forward_neg" 119 } - gene_jaw_height={ "jaw_height_neg" 119 "jaw_height_neg" 118 } - gene_jaw_width={ "jaw_width_pos" 195 "jaw_width_pos" 165 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 49 "mouth_corner_depth_neg" 117 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 65 "mouth_corner_height_pos" 128 } - gene_mouth_forward={ "mouth_forward_neg" 150 "mouth_forward_neg" 123 } - gene_mouth_height={ "mouth_height_neg" 214 "mouth_height_neg" 102 } - gene_mouth_width={ "mouth_width_neg" 117 "mouth_width_neg" 115 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 59 "mouth_upper_lip_size_pos" 134 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 192 "mouth_lower_lip_size_neg" 116 } - gene_mouth_open={ "mouth_open_pos" 0 "mouth_open_pos" 171 } - gene_neck_length={ "neck_length_pos" 138 "neck_length_pos" 138 } - gene_neck_width={ "neck_width_neg" 121 "neck_width_neg" 121 } - gene_bs_cheek_forward={ "cheek_forward_pos" 221 "cheek_forward_pos" 22 } - gene_bs_cheek_height={ "cheek_height_neg" 126 "cheek_height_pos" 40 } - gene_bs_cheek_width={ "cheek_width_pos" 22 "cheek_width_pos" 9 } - gene_bs_ear_angle={ "ear_angle_pos" 25 "ear_angle_pos" 25 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 198 "ear_inner_shape_pos" 198 } - gene_bs_ear_bend={ "ear_lower_bend_pos" 35 "ear_lower_bend_pos" 35 } - gene_bs_ear_outward={ "ear_outward_neg" 37 "ear_outward_neg" 37 } - gene_bs_ear_size={ "ear_size_pos" 39 "ear_size_pos" 39 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 0 "eye_corner_depth_pos" 124 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 113 "eye_fold_shape_neg" 6 } - gene_bs_eye_size={ "eye_size_neg" 79 "eye_size_pos" 83 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 95 "eye_upper_lid_size_pos" 122 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 1 "forehead_brow_curve_neg" 34 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 130 "forehead_brow_forward_pos" 51 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 168 "forehead_brow_inner_height_pos" 30 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 38 "forehead_brow_outer_height_neg" 108 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 81 "forehead_brow_width_neg" 40 } - gene_bs_jaw_def={ "jaw_def_neg" 210 "jaw_def_neg" 27 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 114 "mouth_lower_lip_def_pos" 28 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 2 "mouth_lower_lip_full_neg" 49 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 79 "mouth_lower_lip_pad_neg" 15 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 161 "mouth_lower_lip_width_neg" 112 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 110 "mouth_philtrum_def_pos" 5 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 8 "mouth_philtrum_shape_neg" 36 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 44 "mouth_philtrum_width_neg" 33 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 113 "mouth_upper_lip_def_pos" 5 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 85 "mouth_upper_lip_full_pos" 76 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 118 "mouth_upper_lip_profile_neg" 16 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 22 "mouth_upper_lip_width_neg" 11 } - gene_bs_nose_forward={ "nose_forward_pos" 152 "nose_forward_neg" 3 } - gene_bs_nose_height={ "nose_height_pos" 184 "nose_height_pos" 59 } - gene_bs_nose_length={ "nose_length_pos" 84 "nose_length_pos" 5 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 209 "nose_nostril_height_pos" 21 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 25 "nose_nostril_width_neg" 27 } - gene_bs_nose_profile={ "nose_profile_neg" 255 "nose_profile_pos" 4 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 2 "nose_ridge_angle_neg" 32 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 121 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_neg" 2 "nose_size_neg" 3 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 93 "nose_tip_angle_neg" 46 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 255 "nose_tip_forward_neg" 32 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 177 "nose_tip_width_neg" 38 } - face_detail_cheek_def={ "cheek_def_02" 1 "cheek_def_01" 2 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 130 "cheek_fat_04_pos" 14 } - face_detail_chin_cleft={ "chin_dimple" 255 "chin_cleft" 10 } - face_detail_chin_def={ "chin_def" 2 "chin_def" 10 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 218 "eye_lower_lid_def" 51 } - face_detail_eye_socket={ "eye_socket_02" 44 "eye_socket_01" 7 } - face_detail_nasolabial={ "nasolabial_02" 59 "nasolabial_02" 4 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 2 "nose_ridge_def_neg" 24 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 13 } - face_detail_temple_def={ "temple_def" 5 "temple_def" 22 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_04" 253 } - expression_eye_wrinkles={ "eye_wrinkles_02" 21 "eye_wrinkles_03" 195 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 25 "forehead_wrinkles_01" 82 } - expression_other={ "cheek_wrinkles_both_01" 57 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 142 "complexion_5" 177 } - gene_height={ "normal_height" 126 "normal_height" 119 } - gene_bs_body_type={ "body_average" 22 "body_fat_head_fat_full" 114 } - gene_bs_body_shape={ "body_shape_average_clothed" 0 "body_shape_pear_full" 0 } - gene_bs_bust={ "bust_clothes" 132 "bust_shape_3_full" 139 } - gene_age={ "old_1" 79 "old_1" 115 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 230 "avg_spacing_low_thickness" 121 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 193 "layer_2_high_thickness" 163 } - gene_body_hair={ "body_hair_avg" 45 "body_hair_avg" 176 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 48 "normal_eyes" 48 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 248 "normal_eyelashes" 248 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 130 "all_hairstyles" 0 } - cloaks={ "fp1_cloak" 107 "no_cloak" 0 } - clothes={ "fp1_commoner_clothes" 30 "most_clothes" 0 } - headgear={ "no_headgear" 230 "no_headgear" 0 } - legwear={ "western_common_legwear" 107 "all_legwear" 0 } - } - entity={ 807438772 807438772 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_hugo_cortell.txt b/common/bookmark_portraits/historical_export_easteregg_hugo_cortell.txt deleted file mode 100644 index 4916736c..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_hugo_cortell.txt +++ /dev/null @@ -1,122 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_hugo_cortell -historical_export_easteregg_hugo_cortell={ - type=male - id=19951 - age=0.190000 - genes={ hair_color={ 81 240 87 243 } - skin_color={ 6 33 93 73 } - eye_color={ 140 220 159 138 } - gene_chin_forward={ "chin_forward_pos" 127 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 127 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 131 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 127 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 127 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 127 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 127 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 127 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 127 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 127 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 127 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 127 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 127 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 127 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 127 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 127 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 127 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 127 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 127 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 127 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 0 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 0 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 0 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_upper_bend_pos" 2 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 0 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 0 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 102 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 0 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 0 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 0 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 0 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 0 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_hawk" 117 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 22 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_neg" 26 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 0 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 52 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_02_pos" 53 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 24 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_03" 39 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 162 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 180 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_both_01" 166 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 2 "complexion_1" 0 } - gene_height={ "normal_height" 158 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 112 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average" 40 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 101 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 77 "avg_spacing_avg_thickness" 161 } - gene_eyebrows_fullness={ "layer_2_high_thickness" 156 "layer_2_avg_thickness" 99 } - gene_body_hair={ "body_hair_avg" 103 "body_hair_sparse" 151 } - gene_hair_type={ "hair_wavy" 129 "hair_wavy" 129 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - cloaks={ "ep1_cloak_adventurer" 182 "no_cloak" 0 } - clothes={ "fp2_muslim_war_nobility_clothes" 255 "most_clothes" 0 } - headgear={ "no_headgear" 204 "no_headgear" 0 } - legwear={ "western_common_legwear" 84 "all_legwear" 0 } - beards={ "scripted_character_beards_02" 28 "no_beard" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 96 "all_hairstyles" 0 } - } - entity={ 2268070609 2268070609 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_ismael_serrano.txt b/common/bookmark_portraits/historical_export_easteregg_ismael_serrano.txt deleted file mode 100644 index dec966e9..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_ismael_serrano.txt +++ /dev/null @@ -1,119 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_ismael_serrano -historical_export_easteregg_ismael_serrano={ - type=male - id=16446 - age=0.320000 - genes={ hair_color={ 36 255 43 250 } - skin_color={ 172 28 147 123 } - eye_color={ 16 179 16 179 } - gene_chin_forward={ "chin_forward_neg" 160 "chin_forward_neg" 105 } - gene_chin_height={ "chin_height_neg" 66 "chin_height_neg" 125 } - gene_chin_width={ "chin_width_neg" 118 "chin_width_neg" 102 } - gene_eye_angle={ "eye_angle_neg" 91 "eye_angle_neg" 119 } - gene_eye_depth={ "eye_depth_pos" 8 "eye_depth_neg" 118 } - gene_eye_height={ "eye_height_pos" 165 "eye_height_pos" 134 } - gene_eye_distance={ "eye_distance_neg" 149 "eye_distance_neg" 116 } - gene_eye_shut={ "eye_shut_pos" 96 "eye_shut_pos" 147 } - gene_forehead_angle={ "forehead_angle_neg" 188 "forehead_angle_neg" 120 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 179 "forehead_brow_height_pos" 129 } - gene_forehead_roundness={ "forehead_roundness_pos" 191 "forehead_roundness_pos" 144 } - gene_forehead_width={ "forehead_width_neg" 159 "forehead_width_neg" 103 } - gene_forehead_height={ "forehead_height_pos" 255 "forehead_height_neg" 105 } - gene_head_height={ "head_height_neg" 116 "head_height_neg" 116 } - gene_head_width={ "head_width_pos" 142 "head_width_pos" 142 } - gene_head_profile={ "head_profile_neg" 216 "head_profile_neg" 26 } - gene_head_top_height={ "head_top_height_pos" 182 "head_top_height_pos" 131 } - gene_head_top_width={ "head_top_width_neg" 119 "head_top_width_neg" 121 } - gene_jaw_angle={ "jaw_angle_neg" 196 "jaw_angle_neg" 118 } - gene_jaw_forward={ "jaw_forward_pos" 149 "jaw_forward_pos" 134 } - gene_jaw_height={ "jaw_height_neg" 126 "jaw_height_neg" 123 } - gene_jaw_width={ "jaw_width_pos" 178 "jaw_width_pos" 139 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 84 "mouth_corner_depth_pos" 137 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 163 "mouth_corner_height_pos" 138 } - gene_mouth_forward={ "mouth_forward_neg" 25 "mouth_forward_neg" 91 } - gene_mouth_height={ "mouth_height_pos" 95 "mouth_height_pos" 130 } - gene_mouth_width={ "mouth_width_neg" 72 "mouth_width_neg" 124 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 107 "mouth_upper_lip_size_neg" 116 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 90 "mouth_lower_lip_size_neg" 84 } - gene_mouth_open={ "mouth_open_pos" 182 "mouth_open_pos" 184 } - gene_neck_length={ "neck_length_neg" 65 "neck_length_neg" 106 } - gene_neck_width={ "neck_width_pos" 123 "neck_width_pos" 140 } - gene_bs_cheek_forward={ "cheek_forward_pos" 59 "cheek_forward_pos" 49 } - gene_bs_cheek_height={ "cheek_height_neg" 62 "cheek_height_neg" 30 } - gene_bs_cheek_width={ "cheek_width_pos" 0 "cheek_width_pos" 38 } - gene_bs_ear_angle={ "ear_angle_neg" 79 "ear_angle_neg" 29 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 145 "ear_inner_shape_pos" 8 } - gene_bs_ear_bend={ "ear_lower_bend_pos" 59 "ear_lower_bend_pos" 16 } - gene_bs_ear_outward={ "ear_outward_pos" 65 "ear_outward_pos" 14 } - gene_bs_ear_size={ "ear_size_pos" 33 "ear_size_pos" 9 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 18 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 0 "eye_fold_shape_neg" 0 } - gene_bs_eye_size={ "eye_size_pos" 104 "eye_size_pos" 27 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 216 "eye_upper_lid_size_pos" 183 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 0 "forehead_brow_curve_neg" 134 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 149 "forehead_brow_forward_pos" 27 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 163 "forehead_brow_inner_height_neg" 35 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 78 } - gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 178 "forehead_brow_width_neg" 20 } - gene_bs_jaw_def={ "jaw_def_pos" 72 "jaw_def_pos" 103 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 136 "mouth_lower_lip_def_pos" 105 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 30 "mouth_lower_lip_full_neg" 53 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 210 "mouth_lower_lip_pad_pos" 171 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 71 "mouth_lower_lip_width_pos" 104 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 15 "mouth_philtrum_def_pos" 21 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 144 "mouth_philtrum_shape_neg" 46 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 61 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 42 "mouth_upper_lip_def_pos" 45 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 197 "mouth_upper_lip_full_neg" 19 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 177 "mouth_upper_lip_profile_pos" 147 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 131 "mouth_upper_lip_width_pos" 86 } - gene_bs_nose_forward={ "nose_forward_pos" 1 "nose_forward_pos" 25 } - gene_bs_nose_height={ "nose_height_pos" 127 "nose_height_pos" 98 } - gene_bs_nose_length={ "nose_length_pos" 21 "nose_length_pos" 35 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 0 "nose_nostril_height_neg" 19 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 220 "nose_nostril_width_neg" 104 } - gene_bs_nose_profile={ "nose_profile_pos" 0 "nose_profile_pos" 10 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 255 "nose_ridge_angle_neg" 32 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 0 "nose_ridge_width_neg" 49 } - gene_bs_nose_size={ "nose_size_pos" 67 "nose_size_pos" 47 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 38 "nose_tip_angle_neg" 35 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 95 "nose_tip_forward_neg" 43 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 62 "nose_tip_width_pos" 11 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 119 } - face_detail_cheek_fat={ "cheek_fat_01_neg" 81 "cheek_fat_01_neg" 107 } - face_detail_chin_cleft={ "chin_dimple" 49 "chin_dimple" 4 } - face_detail_chin_def={ "chin_def" 14 "chin_def" 14 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 59 "eye_lower_lid_def" 101 } - face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 8 } - face_detail_nasolabial={ "nasolabial_03" 0 "nasolabial_03" 5 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 255 "nose_ridge_def_neg" 99 } - face_detail_nose_tip_def={ "nose_tip_def" 47 "nose_tip_def" 220 } - face_detail_temple_def={ "temple_def" 34 "temple_def" 190 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 91 } - expression_eye_wrinkles={ "eye_wrinkles_01" 33 "eye_wrinkles_01" 92 } - expression_forehead_wrinkles={ "forehead_wrinkles_02" 189 "forehead_wrinkles_02" 232 } - expression_other={ "cheek_wrinkles_both_01" 209 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_beauty_1" 0 "complexion_3" 163 } - gene_height={ "normal_height" 155 "normal_height" 153 } - gene_bs_body_type={ "body_fat_head_fat_low" 68 "body_fat_head_fat_low" 115 } - gene_bs_body_shape={ "body_shape_average_clothed" 100 "body_shape_hourglass_full" 62 } - gene_bs_bust={ "bust_clothes" 90 "bust_shape_4_full" 104 } - gene_age={ "old_1" 81 "old_1" 81 } - gene_eyebrows_shape={ "far_spacing_avg_thickness" 255 "close_spacing_high_thickness" 196 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 254 "layer_2_low_thickness" 254 } - gene_body_hair={ "body_hair_avg" 202 "body_hair_avg" 105 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 220 "normal_eyes" 220 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 251 "normal_eyelashes" 251 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 61 "all_hairstyles" 0 } - clothes={ "western_commoner_clothes" 198 "most_clothes" 0 } - headgear={ "no_headgear" 143 "no_headgear" 0 } - legwear={ "western_common_legwear" 198 "all_legwear" 0 } - } - entity={ 807438772 807438772 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_jacopo_freddi.txt b/common/bookmark_portraits/historical_export_easteregg_jacopo_freddi.txt new file mode 100644 index 00000000..9815add8 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_jacopo_freddi.txt @@ -0,0 +1,151 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_jacopo_freddi +historical_export_easteregg_jacopo_freddi={ + type=male + id=20270 + random_seed=2791832882 + age=0.240000 + genes={ hair_color={ 51 206 81 232 } + skin_color={ 198 65 144 125 } + eye_color={ 60 181 60 181 } + gene_chin_forward={ "chin_forward_neg" 120 "chin_forward_neg" 120 } + gene_chin_height={ "chin_height_pos" 130 "chin_height_pos" 130 } + gene_chin_width={ "chin_width_neg" 120 "chin_width_neg" 120 } + gene_eye_angle={ "eye_angle_neg" 120 "eye_angle_neg" 120 } + gene_eye_depth={ "eye_depth_pos" 93 "eye_depth_pos" 140 } + gene_eye_height={ "eye_height_pos" 123 "eye_height_pos" 136 } + gene_eye_distance={ "eye_distance_pos" 124 "eye_distance_pos" 139 } + gene_eye_shut={ "eye_shut_pos" 103 "eye_shut_pos" 147 } + gene_forehead_angle={ "forehead_angle_neg" 80 "forehead_angle_neg" 122 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 127 "forehead_brow_height_neg" 127 } + gene_forehead_roundness={ "forehead_roundness_pos" 161 "forehead_roundness_pos" 161 } + gene_forehead_width={ "forehead_width_pos" 129 "forehead_width_pos" 129 } + gene_forehead_height={ "forehead_height_neg" 90 "forehead_height_neg" 90 } + gene_head_height={ "head_height_pos" 137 "head_height_pos" 137 } + gene_head_width={ "head_width_neg" 56 "head_width_neg" 83 } + gene_head_profile={ "head_profile_pos" 118 "head_profile_pos" 144 } + gene_head_top_height={ "head_top_height_pos" 160 "head_top_height_pos" 127 } + gene_head_top_width={ "head_top_width_pos" 200 "head_top_width_pos" 200 } + gene_jaw_angle={ "jaw_angle_pos" 187 "jaw_angle_pos" 133 } + gene_jaw_forward={ "jaw_forward_pos" 133 "jaw_forward_pos" 133 } + gene_jaw_height={ "jaw_height_neg" 102 "jaw_height_neg" 102 } + gene_jaw_width={ "jaw_width_neg" 112 "jaw_width_neg" 112 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 162 "mouth_corner_depth_pos" 162 } + gene_mouth_corner_height={ "mouth_corner_height_neg" 115 "mouth_corner_height_neg" 115 } + gene_mouth_forward={ "mouth_forward_pos" 135 "mouth_forward_pos" 135 } + gene_mouth_height={ "mouth_height_pos" 145 "mouth_height_pos" 145 } + gene_mouth_width={ "mouth_width_neg" 67 "mouth_width_neg" 67 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 128 "mouth_upper_lip_size_pos" 139 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 167 "mouth_lower_lip_size_pos" 152 } + gene_mouth_open={ "mouth_open_neg" 103 "mouth_open_neg" 103 } + gene_neck_length={ "neck_length_neg" 134 "neck_length_neg" 126 } + gene_neck_width={ "neck_width_pos" 113 "neck_width_pos" 139 } + gene_bs_cheek_forward={ "cheek_forward_pos" 5 "cheek_forward_neg" 22 } + gene_bs_cheek_height={ "cheek_height_pos" 103 "cheek_height_neg" 46 } + gene_bs_cheek_width={ "cheek_width_neg" 131 "cheek_width_neg" 7 } + gene_bs_ear_angle={ "ear_angle_neg" 29 "ear_angle_pos" 37 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 55 "ear_inner_shape_pos" 42 } + gene_bs_ear_bend={ "ear_both_bend_pos" 40 "ear_both_bend_pos" 121 } + gene_bs_ear_outward={ "ear_outward_neg" 65 "ear_outward_pos" 7 } + gene_bs_ear_size={ "ear_size_neg" 105 "ear_size_pos" 31 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 97 "eye_corner_depth_pos" 195 } + gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 165 "eye_fold_shape_pos" 11 } + gene_bs_eye_size={ "eye_size_pos" 23 "eye_size_neg" 180 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 39 "eye_upper_lid_size_pos" 39 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 34 "forehead_brow_curve_neg" 34 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 25 "forehead_brow_forward_neg" 47 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 131 "forehead_brow_inner_height_neg" 33 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 33 "forehead_brow_outer_height_pos" 13 } + gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 17 "forehead_brow_width_neg" 49 } + gene_bs_jaw_def={ "jaw_def_pos" 125 "jaw_def_neg" 32 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 13 "mouth_lower_lip_def_pos" 13 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 119 "mouth_lower_lip_full_pos" 11 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 30 "mouth_lower_lip_pad_pos" 30 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 63 "mouth_lower_lip_width_neg" 14 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 1 "mouth_philtrum_def_pos" 1 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 50 "mouth_philtrum_shape_pos" 50 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 16 "mouth_philtrum_width_pos" 16 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 42 "mouth_upper_lip_def_pos" 42 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 80 "mouth_upper_lip_full_neg" 80 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 41 "mouth_upper_lip_profile_pos" 41 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 55 "mouth_upper_lip_width_neg" 55 } + gene_bs_nose_forward={ "nose_forward_pos" 31 "nose_forward_pos" 4 } + gene_bs_nose_height={ "nose_height_pos" 3 "nose_height_pos" 3 } + gene_bs_nose_length={ "nose_length_neg" 35 "nose_length_neg" 15 } + gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 105 "nose_nostril_height_pos" 105 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 91 "nose_nostril_width_neg" 32 } + gene_bs_nose_profile={ "nose_profile_hawk_pos" 61 "nose_profile_neg" 19 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 71 "nose_ridge_angle_pos" 9 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 30 "nose_ridge_width_neg" 30 } + gene_bs_nose_size={ "nose_size_pos" 11 "nose_size_pos" 11 } + gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 15 "nose_tip_angle_neg" 9 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 10 "nose_tip_forward_pos" 10 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 9 "nose_tip_width_pos" 9 } + face_detail_cheek_def={ "cheek_def_02" 2 "cheek_def_02" 2 } + face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_pos" 107 } + face_detail_chin_cleft={ "chin_dimple" 20 "chin_dimple" 20 } + face_detail_chin_def={ "chin_def" 53 "chin_def" 250 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 210 "eye_lower_lid_def" 118 } + face_detail_eye_socket={ "eye_socket_color_02" 59 "eye_socket_color_02" 1 } + face_detail_nasolabial={ "nasolabial_01" 73 "nasolabial_01" 7 } + face_detail_nose_ridge_def={ "nose_ridge_def_pos" 154 "nose_ridge_def_pos" 154 } + face_detail_nose_tip_def={ "nose_tip_def" 205 "nose_tip_def" 112 } + face_detail_temple_def={ "temple_def" 202 "temple_def" 214 } + expression_brow_wrinkles={ "brow_wrinkles_03" 68 "brow_wrinkles_03" 68 } + expression_eye_wrinkles={ "eye_wrinkles_01" 86 "eye_wrinkles_01" 86 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 82 "forehead_wrinkles_01" 82 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_5" 128 "complexion_5" 176 } + gene_height={ "normal_height" 134 "normal_height" 139 } + gene_bs_body_type={ "body_fat_head_fat_low" 125 "body_fat_head_fat_medium" 125 } + gene_bs_body_shape={ "body_shape_apple_half" 105 "body_shape_apple_half" 0 } + gene_bs_bust={ "bust_clothes" 48 "bust_shape_3_full" 138 } + gene_age={ "old_4" 153 "old_4" 153 } + gene_eyebrows_shape={ "avg_spacing_lower_thickness" 223 "avg_spacing_high_thickness" 246 } + gene_eyebrows_fullness={ "layer_2_avg_thickness" 86 "layer_2_high_thickness" 190 } + gene_body_hair={ "body_hair_dense" 150 "body_hair_dense" 150 } + gene_hair_type={ "hair_wavy" 97 "hair_wavy" 97 } + gene_baldness={ "male_pattern_baldness" 211 "male_pattern_baldness" 211 } + eye_accessory={ "normal_eyes" 68 "normal_eyes" 68 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 109 "normal_eyelashes" 109 } + beards={ "fp2_beards_straight" 41 "no_beard" 0 } + cloaks={ "fp4_cloak_western" 255 "no_cloak" 0 } + hairstyles={ "all_hairstyles" 106 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 106 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "western_commoner_clothes" 106 "most_clothes" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 3267808479 3267808479 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=2793867254 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_jakob_jorstedt.txt b/common/bookmark_portraits/historical_export_easteregg_jakob_jorstedt.txt new file mode 100644 index 00000000..a221e990 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_jakob_jorstedt.txt @@ -0,0 +1,147 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_jakob_jorstedt +historical_export_easteregg_jakob_jorstedt={ + type=male + id=20371 + random_seed=1194209448 + age=0.230000 + genes={ hair_color={ 68 105 201 160 } + skin_color={ 20 75 20 75 } + eye_color={ 245 187 160 197 } + gene_chin_forward={ "chin_forward_neg" 123 "chin_forward_neg" 61 } + gene_chin_height={ "chin_height_neg" 180 "chin_height_neg" 118 } + gene_chin_width={ "chin_width_pos" 114 "chin_width_pos" 129 } + gene_eye_angle={ "eye_angle_neg" 143 "eye_angle_neg" 115 } + gene_eye_depth={ "eye_depth_pos" 129 "eye_depth_pos" 129 } + gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 139 } + gene_eye_distance={ "eye_distance_neg" 132 "eye_distance_neg" 116 } + gene_eye_shut={ "eye_shut_neg" 114 "eye_shut_neg" 115 } + gene_forehead_angle={ "forehead_angle_neg" 72 "forehead_angle_neg" 120 } + gene_forehead_brow_height={ "forehead_brow_height_pos" 194 "forehead_brow_height_pos" 140 } + gene_forehead_roundness={ "forehead_roundness_pos" 173 "forehead_roundness_pos" 146 } + gene_forehead_width={ "forehead_width_pos" 97 "forehead_width_pos" 144 } + gene_forehead_height={ "forehead_height_pos" 169 "forehead_height_pos" 128 } + gene_head_height={ "head_height_pos" 202 "head_height_pos" 136 } + gene_head_width={ "head_width_neg" 159 "head_width_neg" 109 } + gene_head_profile={ "head_profile_neg" 163 "head_profile_neg" 107 } + gene_head_top_height={ "head_top_height_pos" 179 "head_top_height_pos" 131 } + gene_head_top_width={ "head_top_width_pos" 118 "head_top_width_pos" 134 } + gene_jaw_angle={ "jaw_angle_pos" 89 "jaw_angle_pos" 135 } + gene_jaw_forward={ "jaw_forward_neg" 139 "jaw_forward_neg" 122 } + gene_jaw_height={ "jaw_height_neg" 94 "jaw_height_neg" 115 } + gene_jaw_width={ "jaw_width_neg" 81 "jaw_width_neg" 97 } + gene_mouth_corner_depth={ "mouth_corner_depth_neg" 135 "mouth_corner_depth_neg" 122 } + gene_mouth_corner_height={ "mouth_corner_height_neg" 156 "mouth_corner_height_neg" 123 } + gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 133 } + gene_mouth_height={ "mouth_height_pos" 81 "mouth_height_pos" 189 } + gene_mouth_width={ "mouth_width_neg" 164 "mouth_width_neg" 118 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 135 "mouth_upper_lip_size_pos" 146 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 151 "mouth_lower_lip_size_pos" 143 } + gene_mouth_open={ "mouth_open_neg" 25 "mouth_open_neg" 98 } + gene_neck_length={ "neck_length_pos" 188 "neck_length_pos" 176 } + gene_neck_width={ "neck_width_pos" 65 "neck_width_pos" 128 } + gene_bs_cheek_forward={ "cheek_forward_pos" 111 "cheek_forward_pos" 23 } + gene_bs_cheek_height={ "cheek_height_pos" 51 "cheek_height_pos" 41 } + gene_bs_cheek_width={ "cheek_width_neg" 125 "cheek_width_neg" 38 } + gene_bs_ear_angle={ "ear_angle_pos" 45 "ear_angle_pos" 132 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 93 "ear_inner_shape_pos" 116 } + gene_bs_ear_bend={ "ear_lower_bend_pos" 71 "ear_both_bend_pos" 48 } + gene_bs_ear_outward={ "ear_outward_pos" 1 "ear_outward_neg" 23 } + gene_bs_ear_size={ "ear_size_neg" 47 "ear_size_neg" 11 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 19 "eye_corner_depth_neg" 51 } + gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 149 "eye_fold_shape_neg" 139 } + gene_bs_eye_size={ "eye_size_pos" 153 "eye_size_neg" 20 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 185 "eye_upper_lid_size_pos" 65 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 151 "forehead_brow_curve_neg" 102 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 39 "forehead_brow_forward_pos" 8 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 63 "forehead_brow_inner_height_pos" 20 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 79 "forehead_brow_outer_height_neg" 19 } + gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 9 "forehead_brow_width_neg" 51 } + gene_bs_jaw_def={ "jaw_def_neg" 45 "jaw_def_neg" 170 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 75 "mouth_lower_lip_def_pos" 95 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 19 "mouth_lower_lip_full_neg" 53 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 67 "mouth_lower_lip_pad_neg" 12 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 173 "mouth_lower_lip_width_pos" 47 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 73 "mouth_philtrum_def_pos" 3 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 115 "mouth_philtrum_shape_pos" 122 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 3 "mouth_philtrum_width_pos" 29 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 197 "mouth_upper_lip_def_pos" 92 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 47 "mouth_upper_lip_full_pos" 78 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 57 "mouth_upper_lip_profile_neg" 58 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 85 "mouth_upper_lip_width_neg" 4 } + gene_bs_nose_forward={ "nose_forward_neg" 71 "nose_forward_pos" 8 } + gene_bs_nose_height={ "nose_height_neg" 112 "nose_height_neg" 112 } + gene_bs_nose_length={ "nose_length_neg" 85 "nose_length_pos" 120 } + gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 131 "nose_nostril_height_neg" 126 } + gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 47 "nose_nostril_width_neg" 8 } + gene_bs_nose_profile={ "nose_profile_pos" 137 "nose_profile_neg" 10 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 115 "nose_ridge_angle_pos" 33 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 43 "nose_ridge_width_pos" 51 } + gene_bs_nose_size={ "nose_size_neg" 51 "nose_size_pos" 8 } + gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 13 "nose_tip_angle_neg" 53 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 139 "nose_tip_forward_neg" 12 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 157 "nose_tip_width_neg" 24 } + face_detail_cheek_def={ "cheek_def_02" 7 "cheek_def_02" 7 } + face_detail_cheek_fat={ "cheek_fat_01_pos" 94 "cheek_fat_01_pos" 94 } + face_detail_chin_cleft={ "chin_dimple" 0 "chin_dimple" 33 } + face_detail_chin_def={ "chin_def" 132 "chin_def" 238 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 133 "eye_lower_lid_def" 50 } + face_detail_eye_socket={ "eye_socket_01" 170 "eye_socket_02" 219 } + face_detail_nasolabial={ "nasolabial_01" 116 "nasolabial_02" 4 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 23 "nose_ridge_def_pos" 0 } + face_detail_nose_tip_def={ "nose_tip_def" 63 "nose_tip_def" 88 } + face_detail_temple_def={ "temple_def" 137 "temple_def" 151 } + expression_brow_wrinkles={ "brow_wrinkles_02" 255 "brow_wrinkles_02" 255 } + expression_eye_wrinkles={ "eye_wrinkles_01" 129 "eye_wrinkles_01" 129 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 27 "forehead_wrinkles_01" 27 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_1" 109 "complexion_6" 117 } + gene_height={ "normal_height" 193 "normal_height" 117 } + gene_bs_body_type={ "body_fat_head_fat_low" 133 "body_fat_head_fat_low" 122 } + gene_bs_body_shape={ "body_shape_pear_full" 203 "body_shape_pear_full" 0 } + gene_bs_bust={ "bust_clothes" 29 "bust_shape_4_full" 107 } + gene_age={ "old_4" 186 "old_4" 186 } + gene_eyebrows_shape={ "avg_spacing_avg_thickness" 114 "avg_spacing_avg_thickness" 114 } + gene_eyebrows_fullness={ "layer_2_high_thickness" 215 "layer_2_avg_thickness" 76 } + gene_body_hair={ "body_hair_avg" 121 "body_hair_avg" 121 } + gene_hair_type={ "hair_wavy" 89 "hair_wavy" 89 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 234 "normal_eyes" 234 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 31 "normal_eyelashes" 31 } + cloaks={ "no_cloak" 1 "no_cloak" 0 } + hairstyles={ "scripted_character_hairstyles_01" 214 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 146 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "northern_commoner_clothes" 76 "most_clothes" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + beards={ "no_beard" 114 "no_beard" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 1955045592 1955045592 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_jakub_potapczyk.txt b/common/bookmark_portraits/historical_export_easteregg_jakub_potapczyk.txt deleted file mode 100644 index 4ffaa0f1..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_jakub_potapczyk.txt +++ /dev/null @@ -1,119 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_jakub_potapczyk -historical_export_easteregg_jakub_potapczyk={ - type=male - id=17409 - age=0.260000 - genes={ hair_color={ 107 228 124 101 } - skin_color={ 30 48 32 88 } - eye_color={ 153 209 223 166 } - gene_chin_forward={ "chin_forward_neg" 138 "chin_forward_neg" 121 } - gene_chin_height={ "chin_height_neg" 110 "chin_height_neg" 112 } - gene_chin_width={ "chin_width_pos" 99 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 130 "eye_angle_pos" 130 } - gene_eye_depth={ "eye_depth_neg" 148 "eye_depth_neg" 116 } - gene_eye_height={ "eye_height_pos" 129 "eye_height_pos" 131 } - gene_eye_distance={ "eye_distance_neg" 107 "eye_distance_neg" 125 } - gene_eye_shut={ "eye_shut_pos" 134 "eye_shut_pos" 134 } - gene_forehead_angle={ "forehead_angle_pos" 162 "forehead_angle_pos" 137 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 99 "forehead_brow_height_neg" 121 } - gene_forehead_roundness={ "forehead_roundness_pos" 129 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_neg" 109 "forehead_width_neg" 109 } - gene_forehead_height={ "forehead_height_pos" 153 "forehead_height_pos" 147 } - gene_head_height={ "head_height_pos" 155 "head_height_pos" 165 } - gene_head_width={ "head_width_pos" 108 "head_width_pos" 136 } - gene_head_profile={ "head_profile_pos" 162 "head_profile_pos" 141 } - gene_head_top_height={ "head_top_height_neg" 104 "head_top_height_neg" 104 } - gene_head_top_width={ "head_top_width_pos" 171 "head_top_width_pos" 171 } - gene_jaw_angle={ "jaw_angle_neg" 102 "jaw_angle_neg" 112 } - gene_jaw_forward={ "jaw_forward_pos" 131 "jaw_forward_pos" 129 } - gene_jaw_height={ "jaw_height_neg" 138 "jaw_height_neg" 122 } - gene_jaw_width={ "jaw_width_neg" 101 "jaw_width_neg" 125 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 138 "mouth_corner_depth_pos" 130 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 125 "mouth_corner_height_pos" 130 } - gene_mouth_forward={ "mouth_forward_neg" 98 "mouth_forward_neg" 115 } - gene_mouth_height={ "mouth_height_pos" 133 "mouth_height_pos" 140 } - gene_mouth_width={ "mouth_width_neg" 72 "mouth_width_neg" 52 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 154 "mouth_upper_lip_size_pos" 160 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 58 "mouth_lower_lip_size_neg" 61 } - gene_mouth_open={ "mouth_open_neg" 61 "mouth_open_neg" 61 } - gene_neck_length={ "neck_length_neg" 107 "neck_length_neg" 107 } - gene_neck_width={ "neck_width_pos" 149 "neck_width_pos" 149 } - gene_bs_cheek_forward={ "cheek_forward_pos" 47 "cheek_forward_pos" 24 } - gene_bs_cheek_height={ "cheek_height_pos" 33 "cheek_height_neg" 9 } - gene_bs_cheek_width={ "cheek_width_pos" 29 "cheek_width_neg" 36 } - gene_bs_ear_angle={ "ear_angle_neg" 81 "ear_angle_neg" 69 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 72 "ear_inner_shape_pos" 6 } - gene_bs_ear_bend={ "ear_both_bend_pos" 26 "ear_lower_bend_pos" 26 } - gene_bs_ear_outward={ "ear_outward_pos" 17 "ear_outward_neg" 15 } - gene_bs_ear_size={ "ear_size_neg" 4 "ear_size_neg" 4 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 25 "eye_corner_depth_neg" 16 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 53 "eye_fold_shape_neg" 18 } - gene_bs_eye_size={ "eye_size_neg" 189 "eye_size_pos" 196 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 3 "eye_upper_lid_size_neg" 24 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 189 "forehead_brow_curve_pos" 48 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 27 "forehead_brow_forward_pos" 16 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 9 "forehead_brow_inner_height_neg" 73 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 71 "forehead_brow_outer_height_pos" 48 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 39 "forehead_brow_width_pos" 48 } - gene_bs_jaw_def={ "jaw_def_pos" 81 "jaw_def_pos" 42 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 139 "mouth_lower_lip_def_pos" 49 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 127 "mouth_lower_lip_full_pos" 21 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 31 "mouth_lower_lip_pad_pos" 26 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 51 "mouth_lower_lip_width_neg" 51 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 45 "mouth_philtrum_def_pos" 8 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 1 "mouth_philtrum_shape_pos" 51 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 81 "mouth_philtrum_width_pos" 81 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 202 "mouth_upper_lip_def_pos" 64 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 173 "mouth_upper_lip_full_pos" 51 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 63 "mouth_upper_lip_profile_neg" 101 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 27 "mouth_upper_lip_width_neg" 27 } - gene_bs_nose_forward={ "nose_forward_pos" 29 "nose_forward_neg" 22 } - gene_bs_nose_height={ "nose_height_pos" 53 "nose_height_pos" 87 } - gene_bs_nose_length={ "nose_length_neg" 107 "nose_length_neg" 116 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 36 "nose_nostril_height_pos" 36 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 9 "nose_nostril_width_neg" 9 } - gene_bs_nose_profile={ "nose_profile_hawk" 11 "nose_profile_hawk" 14 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 115 "nose_ridge_angle_pos" 22 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 57 "nose_ridge_width_neg" 12 } - gene_bs_nose_size={ "nose_size_neg" 3 "nose_size_neg" 18 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 11 "nose_tip_angle_neg" 11 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 42 "nose_tip_forward_neg" 42 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 12 "nose_tip_width_pos" 12 } - face_detail_cheek_def={ "cheek_def_02" 0 "cheek_def_01" 10 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 28 "cheek_fat_01_neg" 113 } - face_detail_chin_cleft={ "chin_cleft" 30 "chin_dimple" 20 } - face_detail_chin_def={ "chin_def" 144 "chin_def" 7 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 189 "eye_lower_lid_def" 153 } - face_detail_eye_socket={ "eye_socket_03" 205 "eye_socket_03" 232 } - face_detail_nasolabial={ "nasolabial_01" 108 "nasolabial_03" 21 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 34 "nose_ridge_def_pos" 34 } - face_detail_nose_tip_def={ "nose_tip_def" 80 "nose_tip_def" 4 } - face_detail_temple_def={ "temple_def" 123 "temple_def" 238 } - expression_brow_wrinkles={ "brow_wrinkles_02" 66 "brow_wrinkles_02" 91 } - expression_eye_wrinkles={ "eye_wrinkles_01" 219 "eye_wrinkles_01" 72 } - expression_forehead_wrinkles={ "forehead_wrinkles_02" 93 "forehead_wrinkles_01" 237 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_3" 82 "complexion_6" 202 } - gene_height={ "normal_height" 166 "normal_height" 117 } - gene_bs_body_type={ "body_fat_head_fat_medium" 127 "body_fat_head_fat_full" 130 } - gene_bs_body_shape={ "body_shape_average_clothed" 201 "body_shape_apple_half" 0 } - gene_bs_bust={ "bust_clothes" 186 "bust_shape_3_half" 152 } - gene_age={ "old_beauty_1" 168 "old_4" 165 } - gene_eyebrows_shape={ "avg_spacing_lower_thickness" 166 "far_spacing_lower_thickness" 166 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 149 "layer_2_avg_thickness" 149 } - gene_body_hair={ "body_hair_sparse_low_stubble" 186 "body_hair_sparse" 186 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 161 "normal_eyes" 161 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 8 "normal_eyelashes" 8 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 51 "all_hairstyles" 0 } - clothes={ "western_commoner_clothes" 49 "most_clothes" 0 } - headgear={ "no_headgear" 67 "no_headgear" 0 } - legwear={ "western_common_legwear" 49 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_james_beaumont.txt b/common/bookmark_portraits/historical_export_easteregg_james_beaumont.txt deleted file mode 100644 index da80eccf..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_james_beaumont.txt +++ /dev/null @@ -1,122 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_james_beaumont -historical_export_easteregg_james_beaumont={ - type=male - id=19229 - age=0.260000 - genes={ hair_color={ 52 101 182 117 } - skin_color={ 21 57 15 73 } - eye_color={ 232 184 118 194 } - gene_chin_forward={ "chin_forward_pos" 91 "chin_forward_pos" 149 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 139 "chin_width_pos" 139 } - gene_eye_angle={ "eye_angle_neg" 125 "eye_angle_neg" 125 } - gene_eye_depth={ "eye_depth_pos" 160 "eye_depth_pos" 160 } - gene_eye_height={ "eye_height_neg" 95 "eye_height_neg" 117 } - gene_eye_distance={ "eye_distance_neg" 115 "eye_distance_neg" 125 } - gene_eye_shut={ "eye_shut_pos" 144 "eye_shut_pos" 144 } - gene_forehead_angle={ "forehead_angle_neg" 118 "forehead_angle_neg" 118 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 130 "forehead_brow_height_pos" 130 } - gene_forehead_roundness={ "forehead_roundness_neg" 63 "forehead_roundness_neg" 63 } - gene_forehead_width={ "forehead_width_neg" 111 "forehead_width_neg" 111 } - gene_forehead_height={ "forehead_height_pos" 152 "forehead_height_pos" 152 } - gene_head_height={ "head_height_neg" 112 "head_height_neg" 112 } - gene_head_width={ "head_width_neg" 106 "head_width_neg" 106 } - gene_head_profile={ "head_profile_pos" 139 "head_profile_pos" 139 } - gene_head_top_height={ "head_top_height_pos" 144 "head_top_height_pos" 144 } - gene_head_top_width={ "head_top_width_pos" 130 "head_top_width_pos" 130 } - gene_jaw_angle={ "jaw_angle_neg" 114 "jaw_angle_neg" 114 } - gene_jaw_forward={ "jaw_forward_pos" 130 "jaw_forward_pos" 130 } - gene_jaw_height={ "jaw_height_pos" 138 "jaw_height_pos" 138 } - gene_jaw_width={ "jaw_width_pos" 142 "jaw_width_pos" 142 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 137 "mouth_corner_depth_pos" 137 } - gene_mouth_corner_height={ "mouth_corner_height_neg" 117 "mouth_corner_height_neg" 117 } - gene_mouth_forward={ "mouth_forward_neg" 122 "mouth_forward_neg" 122 } - gene_mouth_height={ "mouth_height_pos" 132 "mouth_height_pos" 132 } - gene_mouth_width={ "mouth_width_pos" 188 "mouth_width_pos" 188 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 110 "mouth_upper_lip_size_neg" 110 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 103 "mouth_lower_lip_size_neg" 103 } - gene_mouth_open={ "mouth_open_neg" 43 "mouth_open_neg" 43 } - gene_neck_length={ "neck_length_pos" 152 "neck_length_pos" 152 } - gene_neck_width={ "neck_width_neg" 122 "neck_width_neg" 122 } - gene_bs_cheek_forward={ "cheek_forward_pos" 37 "cheek_forward_neg" 49 } - gene_bs_cheek_height={ "cheek_height_neg" 37 "cheek_height_neg" 37 } - gene_bs_cheek_width={ "cheek_width_neg" 25 "cheek_width_neg" 25 } - gene_bs_ear_angle={ "ear_angle_pos" 116 "ear_angle_pos" 116 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 53 "ear_inner_shape_pos" 53 } - gene_bs_ear_bend={ "ear_upper_bend_pos" 172 "ear_upper_bend_pos" 172 } - gene_bs_ear_outward={ "ear_outward_neg" 3 "ear_outward_neg" 3 } - gene_bs_ear_size={ "ear_size_pos" 57 "ear_size_pos" 57 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 121 "eye_corner_depth_neg" 30 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 137 "eye_fold_shape_pos" 86 } - gene_bs_eye_size={ "eye_size_neg" 135 "eye_size_neg" 105 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 69 "eye_upper_lid_size_neg" 12 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 37 "forehead_brow_curve_pos" 37 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 32 "forehead_brow_forward_neg" 32 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 108 "forehead_brow_inner_height_neg" 108 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 30 "forehead_brow_outer_height_neg" 30 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 26 "forehead_brow_width_pos" 26 } - gene_bs_jaw_def={ "jaw_def_pos" 78 "jaw_def_pos" 78 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 131 "mouth_lower_lip_def_pos" 131 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 31 "mouth_lower_lip_full_pos" 31 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 185 "mouth_lower_lip_pad_neg" 185 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 33 "mouth_lower_lip_width_neg" 33 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 60 "mouth_philtrum_def_pos" 60 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 3 "mouth_philtrum_shape_pos" 3 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 21 "mouth_philtrum_width_pos" 21 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 28 "mouth_upper_lip_def_pos" 28 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 204 "mouth_upper_lip_full_neg" 204 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 95 "mouth_upper_lip_profile_pos" 95 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 75 "mouth_upper_lip_width_neg" 75 } - gene_bs_nose_forward={ "nose_forward_neg" 33 "nose_forward_neg" 33 } - gene_bs_nose_height={ "nose_height_neg" 71 "nose_height_neg" 71 } - gene_bs_nose_length={ "nose_length_pos" 115 "nose_length_pos" 115 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 1 "nose_nostril_height_neg" 22 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 10 "nose_nostril_width_neg" 10 } - gene_bs_nose_profile={ "nose_profile_pos" 115 "nose_profile_pos" 30 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 19 "nose_ridge_angle_pos" 19 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 25 "nose_ridge_width_pos" 102 } - gene_bs_nose_size={ "nose_size_pos" 53 "nose_size_pos" 53 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 99 "nose_tip_angle_pos" 15 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 35 "nose_tip_forward_pos" 43 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 117 "nose_tip_width_pos" 117 } - face_detail_cheek_def={ "cheek_def_01" 28 "cheek_def_01" 28 } - face_detail_cheek_fat={ "cheek_fat_02_pos" 172 "cheek_fat_04_pos" 125 } - face_detail_chin_cleft={ "chin_dimple" 3 "chin_dimple" 3 } - face_detail_chin_def={ "chin_def_neg" 216 "chin_def_neg" 216 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 184 "eye_lower_lid_def" 184 } - face_detail_eye_socket={ "eye_socket_01" 87 "eye_socket_01" 20 } - face_detail_nasolabial={ "nasolabial_03" 0 "nasolabial_01" 24 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 60 "nose_ridge_def_pos" 19 } - face_detail_nose_tip_def={ "nose_tip_def" 18 "nose_tip_def" 18 } - face_detail_temple_def={ "temple_def" 195 "temple_def" 195 } - expression_brow_wrinkles={ "brow_wrinkles_01" 76 "brow_wrinkles_01" 76 } - expression_eye_wrinkles={ "eye_wrinkles_01" 57 "eye_wrinkles_01" 57 } - expression_forehead_wrinkles={ "forehead_wrinkles_03" 205 "forehead_wrinkles_03" 205 } - expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_2" 76 "complexion_6" 76 } - gene_height={ "normal_height" 117 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_full" 255 "body_fat_head_fat_medium" 115 } - gene_bs_body_shape={ "body_shape_rectangle_half" 255 "body_shape_rectangle_half" 39 } - gene_bs_bust={ "bust_clothes" 85 "bust_default" 134 } - gene_age={ "old_1" 223 "old_1" 223 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 157 "far_spacing_avg_thickness" 157 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 103 "layer_2_avg_thickness" 72 } - gene_body_hair={ "body_hair_avg" 178 "body_hair_avg" 178 } - gene_hair_type={ "hair_wavy" 94 "hair_wavy" 94 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 127 "normal_eyes" 127 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 86 "normal_eyelashes" 86 } - pose={ "" 255 "" 0 } - beards={ "scripted_character_beards_01" 10 "no_beard" 0 } - cloaks={ "ep1_cloak_adventurer" 65 "no_cloak" 0 } - clothes={ "western_commoner_clothes" 35 "most_clothes" 0 } - hairstyles={ "scripted_character_hairstyles_01" 81 "all_hairstyles" 0 } - headgear={ "western_common" 124 "no_headgear" 0 } - legwear={ "western_common_legwear" 35 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - } - entity={ 616600735 3965692452 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_joacim_carlberg.txt b/common/bookmark_portraits/historical_export_easteregg_joacim_carlberg.txt deleted file mode 100644 index f66cce90..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_joacim_carlberg.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_joacim_carlberg -historical_export_easteregg_joacim_carlberg={ - type=male - id=16808 - age=0.300000 - genes={ hair_color={ 149 237 216 217 } - skin_color={ 34 101 34 101 } - eye_color={ 220 80 241 178 } - gene_chin_forward={ "chin_forward_neg" 138 "chin_forward_neg" 109 } - gene_chin_height={ "chin_height_pos" 113 "chin_height_pos" 156 } - gene_chin_width={ "chin_width_neg" 134 "chin_width_neg" 127 } - gene_eye_angle={ "eye_angle_pos" 132 "eye_angle_pos" 132 } - gene_eye_depth={ "eye_depth_pos" 126 "eye_depth_pos" 139 } - gene_eye_height={ "eye_height_pos" 166 "eye_height_pos" 151 } - gene_eye_distance={ "eye_distance_neg" 116 "eye_distance_neg" 115 } - gene_eye_shut={ "eye_shut_pos" 199 "eye_shut_pos" 146 } - gene_forehead_angle={ "forehead_angle_neg" 115 "forehead_angle_neg" 106 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 197 "forehead_brow_height_neg" 109 } - gene_forehead_roundness={ "forehead_roundness_pos" 157 "forehead_roundness_pos" 188 } - gene_forehead_width={ "forehead_width_pos" 144 "forehead_width_pos" 150 } - gene_forehead_height={ "forehead_height_neg" 234 "forehead_height_neg" 109 } - gene_head_height={ "head_height_pos" 86 "head_height_pos" 144 } - gene_head_width={ "head_width_neg" 75 "head_width_neg" 91 } - gene_head_profile={ "head_profile_neg" 86 "head_profile_neg" 123 } - gene_head_top_height={ "head_top_height_pos" 138 "head_top_height_pos" 139 } - gene_head_top_width={ "head_top_width_neg" 171 "head_top_width_neg" 126 } - gene_jaw_angle={ "jaw_angle_pos" 114 "jaw_angle_pos" 149 } - gene_jaw_forward={ "jaw_forward_pos" 107 "jaw_forward_pos" 136 } - gene_jaw_height={ "jaw_height_pos" 133 "jaw_height_pos" 136 } - gene_jaw_width={ "jaw_width_pos" 173 "jaw_width_pos" 138 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 151 "mouth_corner_depth_neg" 115 } - gene_mouth_corner_height={ "mouth_corner_height_neg" 151 "mouth_corner_height_neg" 121 } - gene_mouth_forward={ "mouth_forward_neg" 100 "mouth_forward_neg" 119 } - gene_mouth_height={ "mouth_height_pos" 142 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_neg" 127 "mouth_width_neg" 118 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 104 "mouth_upper_lip_size_neg" 103 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 146 "mouth_lower_lip_size_pos" 130 } - gene_mouth_open={ "mouth_open_neg" 0 "mouth_open_neg" 2 } - gene_neck_length={ "neck_length_neg" 70 "neck_length_neg" 109 } - gene_neck_width={ "neck_width_neg" 134 "neck_width_neg" 121 } - gene_bs_cheek_forward={ "cheek_forward_neg" 37 "cheek_forward_neg" 26 } - gene_bs_cheek_height={ "cheek_height_pos" 33 "cheek_height_pos" 80 } - gene_bs_cheek_width={ "cheek_width_neg" 55 "cheek_width_pos" 50 } - gene_bs_ear_angle={ "ear_angle_neg" 113 "ear_angle_neg" 49 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 92 "ear_inner_shape_pos" 28 } - gene_bs_ear_bend={ "ear_lower_bend_pos" 39 "ear_lower_bend_pos" 21 } - gene_bs_ear_outward={ "ear_outward_neg" 103 "ear_outward_neg" 4 } - gene_bs_ear_size={ "ear_size_neg" 71 "ear_size_neg" 36 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 97 "eye_corner_depth_pos" 208 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 39 "eye_fold_shape_neg" 45 } - gene_bs_eye_size={ "eye_size_neg" 113 "eye_size_pos" 29 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 161 "eye_upper_lid_size_pos" 33 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 179 "forehead_brow_curve_neg" 103 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 21 "forehead_brow_forward_pos" 14 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 73 "forehead_brow_inner_height_pos" 44 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 25 "forehead_brow_outer_height_neg" 25 } - gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 99 "forehead_brow_width_pos" 4 } - gene_bs_jaw_def={ "jaw_def_neg" 255 "jaw_def_neg" 64 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 130 "mouth_lower_lip_def_pos" 95 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 23 "mouth_lower_lip_full_pos" 110 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 33 "mouth_lower_lip_pad_neg" 3 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 37 "mouth_lower_lip_width_neg" 37 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 64 "mouth_philtrum_def_pos" 4 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 11 "mouth_philtrum_shape_pos" 7 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 135 "mouth_philtrum_width_pos" 71 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 22 "mouth_upper_lip_def_pos" 25 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 137 "mouth_upper_lip_full_pos" 40 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 13 "mouth_upper_lip_profile_pos" 52 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 25 "mouth_upper_lip_width_neg" 37 } - gene_bs_nose_forward={ "nose_forward_neg" 13 "nose_forward_neg" 13 } - gene_bs_nose_height={ "nose_height_neg" 79 "nose_height_neg" 84 } - gene_bs_nose_length={ "nose_length_pos" 43 "nose_length_pos" 14 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 67 "nose_nostril_height_neg" 31 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 17 "nose_nostril_width_pos" 35 } - gene_bs_nose_profile={ "nose_profile_pos" 49 "nose_profile_pos" 46 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 39 "nose_ridge_angle_neg" 15 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 1 "nose_ridge_width_pos" 20 } - gene_bs_nose_size={ "nose_size_neg" 33 "nose_size_pos" 13 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 61 "nose_tip_angle_pos" 61 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 35 "nose_tip_forward_pos" 35 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 73 "nose_tip_width_pos" 73 } - face_detail_cheek_def={ "cheek_def_02" 0 "cheek_def_02" 154 } - face_detail_cheek_fat={ "cheek_fat_04_pos" 167 "cheek_fat_01_pos" 205 } - face_detail_chin_cleft={ "chin_dimple" 72 "chin_dimple" 4 } - face_detail_chin_def={ "chin_def" 107 "chin_def" 181 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 155 "eye_lower_lid_def" 15 } - face_detail_eye_socket={ "eye_socket_color_03" 93 "eye_socket_03" 114 } - face_detail_nasolabial={ "nasolabial_03" 8 "nasolabial_03" 8 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 155 "nose_ridge_def_pos" 18 } - face_detail_nose_tip_def={ "nose_tip_def" 23 "nose_tip_def" 23 } - face_detail_temple_def={ "temple_def" 85 "temple_def" 238 } - expression_brow_wrinkles={ "brow_wrinkles_04" 0 "brow_wrinkles_04" 5 } - expression_eye_wrinkles={ "eye_wrinkles_01" 51 "eye_wrinkles_01" 51 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 86 "forehead_wrinkles_01" 86 } - expression_other={ "cheek_wrinkles_both_01" 51 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_4" 159 "complexion_3" 159 } - gene_height={ "normal_height" 177 "normal_height" 138 } - gene_bs_body_type={ "body_fat_head_fat_medium" 146 "body_fat_head_fat_medium" 151 } - gene_bs_body_shape={ "body_shape_average" 173 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 81 "bust_shape_2_full" 123 } - gene_age={ "old_4" 203 "old_4" 203 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 127 "far_spacing_low_thickness" 128 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 151 "layer_2_lower_thickness" 64 } - gene_body_hair={ "body_hair_avg" 104 "body_hair_avg" 104 } - gene_hair_type={ "hair_straight" 100 "hair_straight" 100 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 16 "normal_eyes" 16 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 94 "normal_eyelashes" 94 } - pose={ "" 255 "" 0 } - clothes={ "fp1_low_nobility_clothes" 21 "most_clothes" 0 } - headgear={ "no_headgear" 84 "no_headgear" 0 } - legwear={ "western_common_legwear" 183 "all_legwear" 0 } - beards={ "scripted_character_beards_01" 196 "no_beard" 0 } - hairstyles={ "scripted_character_hairstyles_01" 252 "all_hairstyles" 0 } - } - entity={ 807438772 807438772 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_joe_parkin.txt b/common/bookmark_portraits/historical_export_easteregg_joe_parkin.txt index f6d811e3..17d803d8 100644 --- a/common/bookmark_portraits/historical_export_easteregg_joe_parkin.txt +++ b/common/bookmark_portraits/historical_export_easteregg_joe_parkin.txt @@ -109,7 +109,7 @@ historical_export_easteregg_joe_parkin={ teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } eyelashes_accessory={ "normal_eyelashes" 255 "normal_eyelashes" 147 } pose={ "" 255 "" 0 } - special_headgear_eye_patch={ "eye_patch" 127 "eye_patch" 0 } + special_headgear_spectacles={ "eye_patch" 127 "eye_patch" 0 } clothes={ "northern_war_nobility_clothes" 109 "most_clothes" 0 } headgear={ "no_headgear" 216 "no_headgear" 0 } legwear={ "western_common_legwear" 118 "all_legwear" 0 } diff --git a/common/bookmark_portraits/historical_export_easteregg_johanna_hermansson.txt b/common/bookmark_portraits/historical_export_easteregg_johanna_hermansson.txt new file mode 100644 index 00000000..ce6c47ea --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_johanna_hermansson.txt @@ -0,0 +1,139 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_johanna_hermansson +historical_export_easteregg_johanna_hermansson={ + type=female + id=19227 + random_seed=2028523731 + age=0.300000 + genes={ hair_color={ 106 51 106 51 } + skin_color={ 27 78 27 78 } + eye_color={ 181 151 181 151 } + gene_chin_forward={ "chin_forward_pos" 209 "chin_forward_pos" 209 } + gene_chin_height={ "chin_height_pos" 128 "chin_height_pos" 128 } + gene_chin_width={ "chin_width_neg" 118 "chin_width_neg" 118 } + gene_eye_angle={ "eye_angle_pos" 128 "eye_angle_pos" 128 } + gene_eye_depth={ "eye_depth_pos" 127 "eye_depth_pos" 127 } + gene_eye_height={ "eye_height_neg" 124 "eye_height_neg" 124 } + gene_eye_distance={ "eye_distance_pos" 130 "eye_distance_pos" 130 } + gene_eye_shut={ "eye_shut_pos" 144 "eye_shut_pos" 144 } + gene_forehead_angle={ "forehead_angle_neg" 72 "forehead_angle_neg" 72 } + gene_forehead_brow_height={ "forehead_brow_height_pos" 133 "forehead_brow_height_pos" 133 } + gene_forehead_roundness={ "forehead_roundness_pos" 176 "forehead_roundness_pos" 176 } + gene_forehead_width={ "forehead_width_pos" 134 "forehead_width_pos" 134 } + gene_forehead_height={ "forehead_height_neg" 114 "forehead_height_neg" 114 } + gene_head_height={ "head_height_neg" 107 "head_height_neg" 107 } + gene_head_width={ "head_width_neg" 109 "head_width_neg" 109 } + gene_head_profile={ "head_profile_neg" 80 "head_profile_neg" 80 } + gene_head_top_height={ "head_top_height_neg" 93 "head_top_height_neg" 93 } + gene_head_top_width={ "head_top_width_neg" 87 "head_top_width_neg" 87 } + gene_jaw_angle={ "jaw_angle_pos" 146 "jaw_angle_pos" 146 } + gene_jaw_forward={ "jaw_forward_pos" 138 "jaw_forward_pos" 138 } + gene_jaw_height={ "jaw_height_pos" 156 "jaw_height_pos" 156 } + gene_jaw_width={ "jaw_width_neg" 86 "jaw_width_neg" 86 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 133 "mouth_corner_depth_pos" 133 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } + gene_mouth_forward={ "mouth_forward_pos" 131 "mouth_forward_pos" 131 } + gene_mouth_height={ "mouth_height_pos" 153 "mouth_height_pos" 153 } + gene_mouth_width={ "mouth_width_pos" 144 "mouth_width_pos" 144 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 141 "mouth_upper_lip_size_pos" 141 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 137 "mouth_lower_lip_size_pos" 137 } + gene_mouth_open={ "mouth_open_neg" 104 "mouth_open_neg" 104 } + gene_neck_length={ "neck_length_neg" 105 "neck_length_neg" 105 } + gene_neck_width={ "neck_width_neg" 122 "neck_width_neg" 122 } + gene_bs_cheek_forward={ "cheek_forward_pos" 16 "cheek_forward_pos" 16 } + gene_bs_cheek_height={ "cheek_height_pos" 47 "cheek_height_pos" 47 } + gene_bs_cheek_width={ "cheek_width_neg" 6 "cheek_width_neg" 6 } + gene_bs_ear_angle={ "ear_angle_pos" 79 "ear_angle_pos" 79 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 50 "ear_inner_shape_pos" 50 } + gene_bs_ear_bend={ "ear_upper_bend_pos" 3 "ear_upper_bend_pos" 3 } + gene_bs_ear_outward={ "ear_outward_neg" 3 "ear_outward_neg" 3 } + gene_bs_ear_size={ "ear_size_pos" 183 "ear_size_pos" 183 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 175 "eye_corner_depth_pos" 175 } + gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 45 "eye_fold_shape_neg" 45 } + gene_bs_eye_size={ "eye_size_pos" 44 "eye_size_pos" 44 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 30 "eye_upper_lid_size_neg" 30 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 4 "forehead_brow_curve_neg" 4 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 32 "forehead_brow_forward_pos" 32 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 65 "forehead_brow_inner_height_neg" 65 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 9 "forehead_brow_outer_height_neg" 9 } + gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 30 "forehead_brow_width_neg" 30 } + gene_bs_jaw_def={ "jaw_def_neg" 0 "jaw_def_neg" 0 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 24 "mouth_lower_lip_def_pos" 24 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 19 "mouth_lower_lip_full_pos" 19 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 113 "mouth_lower_lip_pad_pos" 113 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 30 "mouth_lower_lip_width_neg" 30 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 18 "mouth_philtrum_def_pos" 18 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 15 "mouth_philtrum_shape_pos" 15 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 52 "mouth_philtrum_width_pos" 52 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 1 "mouth_upper_lip_def_pos" 1 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 20 "mouth_upper_lip_full_pos" 20 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 31 "mouth_upper_lip_profile_neg" 31 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 111 "mouth_upper_lip_width_pos" 111 } + gene_bs_nose_forward={ "nose_forward_pos" 22 "nose_forward_pos" 22 } + gene_bs_nose_height={ "nose_height_neg" 8 "nose_height_neg" 8 } + gene_bs_nose_length={ "nose_length_pos" 18 "nose_length_pos" 18 } + gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 5 "nose_nostril_height_neg" 5 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 0 "nose_nostril_width_neg" 0 } + gene_bs_nose_profile={ "nose_profile_neg" 65 "nose_profile_neg" 65 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 38 "nose_ridge_angle_neg" 38 } + gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 127 "nose_ridge_width_pos" 127 } + gene_bs_nose_size={ "nose_size_neg" 2 "nose_size_neg" 2 } + gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 15 "nose_tip_angle_pos" 15 } + gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 42 "nose_tip_forward_neg" 42 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 6 "nose_tip_width_pos" 6 } + face_detail_cheek_def={ "cheek_def_01" 174 "cheek_def_01" 174 } + face_detail_cheek_fat={ "cheek_fat_04_pos" 205 "cheek_fat_04_pos" 205 } + face_detail_chin_cleft={ "chin_dimple" 3 "chin_dimple" 3 } + face_detail_chin_def={ "chin_def_neg" 115 "chin_def_neg" 115 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 41 "eye_lower_lid_def" 41 } + face_detail_eye_socket={ "eye_socket_color_03" 9 "eye_socket_color_03" 9 } + face_detail_nasolabial={ "nasolabial_01" 6 "nasolabial_01" 6 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 9 "nose_ridge_def_neg" 9 } + face_detail_nose_tip_def={ "nose_tip_def" 123 "nose_tip_def" 123 } + face_detail_temple_def={ "temple_def" 121 "temple_def" 121 } + expression_brow_wrinkles={ "brow_wrinkles_04" 83 "brow_wrinkles_04" 83 } + expression_eye_wrinkles={ "eye_wrinkles_01" 227 "eye_wrinkles_01" 227 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 255 "forehead_wrinkles_01" 200 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_5" 110 "complexion_5" 110 } + gene_height={ "normal_height" 119 "normal_height" 119 } + gene_bs_body_type={ "body_fat_head_fat_full" 182 "body_fat_head_fat_full" 148 } + gene_bs_body_shape={ "body_shape_hourglass_half" 60 "body_shape_hourglass_half" 15 } + gene_bs_bust={ "bust_clothes" 180 "bust_shape_2_half" 225 } + gene_age={ "old_2" 223 "old_2" 223 } + gene_eyebrows_shape={ "far_spacing_avg_thickness" 161 "far_spacing_avg_thickness" 161 } + gene_eyebrows_fullness={ "layer_2_low_thickness" 102 "layer_2_low_thickness" 102 } + gene_body_hair={ "body_hair_sparse" 114 "body_hair_sparse" 114 } + gene_hair_type={ "hair_wavy" 157 "hair_wavy" 157 } + gene_baldness={ "male_pattern_baldness" 125 "male_pattern_baldness" 125 } + eye_accessory={ "normal_eyes_no_shadow" 255 "normal_eyes" 25 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 229 "normal_eyelashes" 229 } + beards={ "northern_beards_curly" 35 "no_beard" 0 } + cloaks={ "no_cloak" 139 "no_cloak" 0 } + hairstyles={ "northern_hairstyles_wavy" 196 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 182 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "northern_commoner_clothes" 113 "most_clothes" 0 } + headgear={ "northern_common" 30 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 2616704408 2616704408 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_johanna_uddstahl.txt b/common/bookmark_portraits/historical_export_easteregg_johanna_uddstahl.txt new file mode 100644 index 00000000..b3aa4ed4 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_johanna_uddstahl.txt @@ -0,0 +1,138 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_johanna_uddstahl +historical_export_easteregg_johanna_uddstahl={ + type=female + id=17305 + random_seed=3127052159 + age=0.490000 + genes={ hair_color={ 51 228 135 93 } + skin_color={ 93 94 93 94 } + eye_color={ 179 158 48 163 } + gene_chin_forward={ "chin_forward_pos" 106 "chin_forward_pos" 135 } + gene_chin_height={ "chin_height_pos" 21 "chin_height_pos" 137 } + gene_chin_width={ "chin_width_pos" 225 "chin_width_pos" 140 } + gene_eye_angle={ "eye_angle_neg" 102 "eye_angle_neg" 122 } + gene_eye_depth={ "eye_depth_neg" 108 "eye_depth_neg" 118 } + gene_eye_height={ "eye_height_pos" 80 "eye_height_pos" 128 } + gene_eye_distance={ "eye_distance_pos" 73 "eye_distance_pos" 139 } + gene_eye_shut={ "eye_shut_pos" 106 "eye_shut_pos" 143 } + gene_forehead_angle={ "forehead_angle_neg" 122 "forehead_angle_neg" 94 } + gene_forehead_brow_height={ "forehead_brow_height_pos" 140 "forehead_brow_height_pos" 127 } + gene_forehead_roundness={ "forehead_roundness_pos" 204 "forehead_roundness_pos" 199 } + gene_forehead_width={ "forehead_width_pos" 134 "forehead_width_pos" 134 } + gene_forehead_height={ "forehead_height_pos" 146 "forehead_height_pos" 146 } + gene_head_height={ "head_height_pos" 121 "head_height_pos" 174 } + gene_head_width={ "head_width_neg" 129 "head_width_neg" 104 } + gene_head_profile={ "head_profile_pos" 145 "head_profile_pos" 177 } + gene_head_top_height={ "head_top_height_neg" 58 "head_top_height_neg" 114 } + gene_head_top_width={ "head_top_width_neg" 172 "head_top_width_neg" 127 } + gene_jaw_angle={ "jaw_angle_neg" 216 "jaw_angle_neg" 127 } + gene_jaw_forward={ "jaw_forward_neg" 113 "jaw_forward_neg" 122 } + gene_jaw_height={ "jaw_height_pos" 151 "jaw_height_pos" 151 } + gene_jaw_width={ "jaw_width_neg" 129 "jaw_width_neg" 76 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 133 "mouth_corner_depth_pos" 133 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 60 "mouth_corner_height_pos" 131 } + gene_mouth_forward={ "mouth_forward_pos" 61 "mouth_forward_pos" 134 } + gene_mouth_height={ "mouth_height_pos" 126 "mouth_height_pos" 145 } + gene_mouth_width={ "mouth_width_neg" 96 "mouth_width_neg" 114 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 134 "mouth_upper_lip_size_pos" 134 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 91 "mouth_lower_lip_size_neg" 91 } + gene_mouth_open={ "mouth_open_pos" 4 "mouth_open_pos" 174 } + gene_neck_length={ "neck_length_pos" 102 "neck_length_pos" 137 } + gene_neck_width={ "neck_width_neg" 172 "neck_width_neg" 123 } + gene_bs_cheek_forward={ "cheek_forward_neg" 7 "cheek_forward_pos" 18 } + gene_bs_cheek_height={ "cheek_height_pos" 37 "cheek_height_pos" 19 } + gene_bs_cheek_width={ "cheek_width_neg" 29 "cheek_width_neg" 119 } + gene_bs_ear_angle={ "ear_angle_neg" 38 "ear_angle_neg" 38 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 36 "ear_inner_shape_pos" 36 } + gene_bs_ear_bend={ "ear_lower_bend_pos" 67 "ear_lower_bend_pos" 67 } + gene_bs_ear_outward={ "ear_outward_neg" 35 "ear_outward_neg" 35 } + gene_bs_ear_size={ "ear_size_pos" 34 "ear_size_pos" 34 } + gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 169 "eye_corner_depth_pos" 178 } + gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 31 "eye_fold_shape_pos" 55 } + gene_bs_eye_size={ "eye_size_pos" 9 "eye_size_neg" 103 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 5 "eye_upper_lid_size_pos" 5 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 23 "forehead_brow_curve_pos" 35 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 65 "forehead_brow_forward_pos" 22 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 79 "forehead_brow_inner_height_pos" 32 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 5 "forehead_brow_outer_height_neg" 83 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 46 "forehead_brow_width_pos" 46 } + gene_bs_jaw_def={ "jaw_def_neg" 7 "jaw_def_neg" 24 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 85 "mouth_lower_lip_def_pos" 46 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 37 "mouth_lower_lip_full_neg" 117 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 125 "mouth_lower_lip_pad_neg" 16 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 86 "mouth_lower_lip_width_pos" 86 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 71 "mouth_philtrum_def_pos" 45 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 39 "mouth_philtrum_shape_pos" 19 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 85 "mouth_philtrum_width_neg" 195 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 19 "mouth_upper_lip_def_pos" 24 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 71 "mouth_upper_lip_full_pos" 37 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 3 "mouth_upper_lip_profile_pos" 3 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 21 "mouth_upper_lip_width_pos" 102 } + gene_bs_nose_forward={ "nose_forward_neg" 109 "nose_forward_neg" 35 } + gene_bs_nose_height={ "nose_height_neg" 19 "nose_height_neg" 30 } + gene_bs_nose_length={ "nose_length_neg" 33 "nose_length_neg" 33 } + gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 41 "nose_nostril_height_pos" 32 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 80 "nose_nostril_width_neg" 84 } + gene_bs_nose_profile={ "nose_profile_hawk" 71 "nose_profile_hawk_pos" 42 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 21 "nose_ridge_angle_pos" 16 } + gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 233 "nose_ridge_width_neg" 6 } + gene_bs_nose_size={ "nose_size_pos" 155 "nose_size_neg" 15 } + gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 26 "nose_tip_angle_neg" 26 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 23 "nose_tip_forward_pos" 23 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 37 "nose_tip_width_neg" 34 } + face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_02" 146 } + face_detail_cheek_fat={ "cheek_fat_01_neg" 0 "cheek_fat_01_neg" 12 } + face_detail_chin_cleft={ "chin_cleft" 5 "chin_dimple" 5 } + face_detail_chin_def={ "chin_def_neg" 11 "chin_def" 8 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 36 "eye_lower_lid_def" 24 } + face_detail_eye_socket={ "eye_socket_03" 123 "eye_socket_color_01" 24 } + face_detail_nasolabial={ "nasolabial_04" 77 "nasolabial_03" 77 } + face_detail_nose_ridge_def={ "nose_ridge_def_pos" 12 "nose_ridge_def_pos" 12 } + face_detail_nose_tip_def={ "nose_tip_def" 108 "nose_tip_def" 108 } + face_detail_temple_def={ "temple_def" 60 "temple_def" 245 } + expression_brow_wrinkles={ "brow_wrinkles_01" 47 "brow_wrinkles_01" 47 } + expression_eye_wrinkles={ "eye_wrinkles_01" 70 "eye_wrinkles_01" 70 } + expression_forehead_wrinkles={ "forehead_wrinkles_02" 225 "forehead_wrinkles_02" 225 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_2" 124 "complexion_6" 111 } + gene_height={ "normal_height" 116 "normal_height" 116 } + gene_bs_body_type={ "body_fat_head_fat_low" 143 "body_fat_head_fat_low" 133 } + gene_bs_body_shape={ "body_shape_apple_full" 148 "body_shape_apple_full" 57 } + gene_bs_bust={ "bust_clothes" 0 "bust_default" 1 } + gene_age={ "old_1" 116 "old_1" 116 } + gene_eyebrows_shape={ "far_spacing_avg_thickness" 184 "far_spacing_low_thickness" 149 } + gene_eyebrows_fullness={ "layer_2_low_thickness" 136 "layer_2_low_thickness" 136 } + gene_body_hair={ "body_hair_dense" 153 "body_hair_dense" 153 } + gene_hair_type={ "hair_wavy" 109 "hair_wavy" 109 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 60 "normal_eyes" 60 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 92 "normal_eyelashes" 92 } + cloaks={ "no_cloak" 46 "no_cloak" 0 } + hairstyles={ "northern_hairstyles_wavy" 213 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 64 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "northern_commoner_clothes" 231 "most_clothes" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 3942081117 3942081117 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_katya_boestad.txt b/common/bookmark_portraits/historical_export_easteregg_katya_boestad.txt deleted file mode 100644 index 0f610d80..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_katya_boestad.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_katya_boestad -historical_export_easteregg_katya_boestad={ - type=female - id=16508 - age=0.320000 - genes={ hair_color={ 135 182 242 52 } - skin_color={ 11 43 83 75 } - eye_color={ 220 113 244 194 } - gene_chin_forward={ "chin_forward_neg" 178 "chin_forward_neg" 106 } - gene_chin_height={ "chin_height_pos" 122 "chin_height_pos" 130 } - gene_chin_width={ "chin_width_pos" 174 "chin_width_pos" 138 } - gene_eye_angle={ "eye_angle_neg" 119 "eye_angle_neg" 115 } - gene_eye_depth={ "eye_depth_pos" 179 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 175 "eye_height_pos" 128 } - gene_eye_distance={ "eye_distance_neg" 137 "eye_distance_neg" 121 } - gene_eye_shut={ "eye_shut_pos" 145 "eye_shut_pos" 142 } - gene_forehead_angle={ "forehead_angle_pos" 127 "forehead_angle_neg" 114 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 107 "forehead_brow_height_pos" 152 } - gene_forehead_roundness={ "forehead_roundness_neg" 224 "forehead_roundness_neg" 116 } - gene_forehead_width={ "forehead_width_pos" 110 "forehead_width_pos" 152 } - gene_forehead_height={ "forehead_height_pos" 160 "forehead_height_pos" 130 } - gene_head_height={ "head_height_neg" 103 "head_height_neg" 103 } - gene_head_width={ "head_width_pos" 38 "head_width_pos" 133 } - gene_head_profile={ "head_profile_neg" 17 "head_profile_neg" 99 } - gene_head_top_height={ "head_top_height_neg" 107 "head_top_height_neg" 89 } - gene_head_top_width={ "head_top_width_pos" 161 "head_top_width_pos" 160 } - gene_jaw_angle={ "jaw_angle_pos" 175 "jaw_angle_pos" 132 } - gene_jaw_forward={ "jaw_forward_pos" 108 "jaw_forward_pos" 162 } - gene_jaw_height={ "jaw_height_pos" 121 "jaw_height_pos" 136 } - gene_jaw_width={ "jaw_width_pos" 167 "jaw_width_pos" 144 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 186 "mouth_corner_depth_pos" 132 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 126 "mouth_corner_height_pos" 134 } - gene_mouth_forward={ "mouth_forward_neg" 126 "mouth_forward_neg" 126 } - gene_mouth_height={ "mouth_height_neg" 127 "mouth_height_neg" 127 } - gene_mouth_width={ "mouth_width_neg" 45 "mouth_width_neg" 45 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 82 "mouth_upper_lip_size_pos" 158 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 137 "mouth_lower_lip_size_neg" 50 } - gene_mouth_open={ "mouth_open_pos" 0 "mouth_open_neg" 0 } - gene_neck_length={ "neck_length_neg" 81 "neck_length_neg" 106 } - gene_neck_width={ "neck_width_pos" 156 "neck_width_pos" 131 } - gene_bs_cheek_forward={ "cheek_forward_pos" 0 "cheek_forward_neg" 5 } - gene_bs_cheek_height={ "cheek_height_pos" 109 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 15 "cheek_width_pos" 38 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 23 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 1 "ear_inner_shape_pos" 39 } - gene_bs_ear_bend={ "ear_lower_bend_pos" 141 "ear_lower_bend_pos" 55 } - gene_bs_ear_outward={ "ear_outward_neg" 17 "ear_outward_neg" 1 } - gene_bs_ear_size={ "ear_size_pos" 56 "ear_size_pos" 16 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 1 "eye_corner_depth_neg" 49 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 0 "eye_fold_shape_neg" 47 } - gene_bs_eye_size={ "eye_size_neg" 70 "eye_size_neg" 85 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 126 "eye_upper_lid_size_neg" 110 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 132 "forehead_brow_curve_neg" 13 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 65 "forehead_brow_forward_pos" 83 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 76 "forehead_brow_inner_height_neg" 16 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 67 "forehead_brow_outer_height_pos" 27 } - gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 0 "forehead_brow_width_neg" 11 } - gene_bs_jaw_def={ "jaw_def_neg" 220 "jaw_def_neg" 126 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 14 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 57 "mouth_lower_lip_full_pos" 33 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 232 "mouth_lower_lip_pad_neg" 102 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 205 "mouth_lower_lip_width_neg" 9 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 57 "mouth_philtrum_def_pos" 41 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 0 "mouth_philtrum_shape_neg" 18 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 21 "mouth_philtrum_width_pos" 21 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 96 "mouth_upper_lip_def_pos" 51 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 98 "mouth_upper_lip_full_pos" 82 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 47 "mouth_upper_lip_profile_neg" 12 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 127 "mouth_upper_lip_width_pos" 10 } - gene_bs_nose_forward={ "nose_forward_pos" 167 "nose_forward_pos" 26 } - gene_bs_nose_height={ "nose_height_pos" 56 "nose_height_neg" 51 } - gene_bs_nose_length={ "nose_length_neg" 2 "nose_length_pos" 100 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 255 "nose_nostril_height_pos" 34 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 33 "nose_nostril_width_neg" 5 } - gene_bs_nose_profile={ "nose_profile_pos" 82 "nose_profile_hawk" 118 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 255 "nose_ridge_angle_neg" 26 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 59 "nose_ridge_width_neg" 46 } - gene_bs_nose_size={ "nose_size_neg" 156 "nose_size_neg" 27 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 33 "nose_tip_angle_neg" 3 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 53 "nose_tip_forward_pos" 8 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 0 "nose_tip_width_neg" 163 } - face_detail_cheek_def={ "cheek_def_02" 49 "cheek_def_02" 23 } - face_detail_cheek_fat={ "cheek_fat_01_neg" 1 "cheek_fat_01_neg" 53 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 20 } - face_detail_chin_def={ "chin_def" 86 "chin_def" 6 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 236 } - face_detail_eye_socket={ "eye_socket_02" 255 "eye_socket_01" 149 } - face_detail_nasolabial={ "nasolabial_01" 1 "nasolabial_01" 118 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 255 "nose_ridge_def_neg" 32 } - face_detail_nose_tip_def={ "nose_tip_def" 193 "nose_tip_def" 207 } - face_detail_temple_def={ "temple_def" 197 "temple_def" 187 } - expression_brow_wrinkles={ "brow_wrinkles_04" 134 "brow_wrinkles_04" 134 } - expression_eye_wrinkles={ "eye_wrinkles_02" 245 "eye_wrinkles_02" 162 } - expression_forehead_wrinkles={ "forehead_wrinkles_03" 229 "forehead_wrinkles_03" 229 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 206 "complexion_1" 175 } - gene_height={ "normal_height" 170 "normal_height" 114 } - gene_bs_body_type={ "body_average" 207 "body_fat_head_fat_low" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 92 "body_shape_apple_full" 0 } - gene_bs_bust={ "bust_clothes" 119 "bust_shape_4_half" 152 } - gene_age={ "old_4" 219 "old_4" 219 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 223 "far_spacing_low_thickness" 131 } - gene_eyebrows_fullness={ "layer_2_high_thickness" 137 "layer_2_low_thickness" 152 } - gene_body_hair={ "body_hair_dense" 177 "body_hair_dense" 177 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 72 "normal_eyes" 31 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 255 "normal_eyelashes" 145 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 186 "all_hairstyles" 0 } - cloaks={ "fp1_cloak" 233 "no_cloak" 0 } - clothes={ "northern_commoner_clothes" 216 "most_clothes" 0 } - headgear={ "no_headgear" 8 "no_headgear" 0 } - legwear={ "western_common_legwear" 233 "all_legwear" 0 } - } - entity={ 2697330347 2697330347 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_linda_tiger.txt b/common/bookmark_portraits/historical_export_easteregg_linda_tiger.txt deleted file mode 100644 index 8ae6bc8e..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_linda_tiger.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_linda_tiger -historical_export_easteregg_linda_tiger={ - type=female - id=17483 - age=0.250000 - genes={ hair_color={ 173 253 213 184 } - skin_color={ 15 71 50 84 } - eye_color={ 127 200 29 135 } - gene_chin_forward={ "chin_forward_neg" 214 "chin_forward_neg" 91 } - gene_chin_height={ "chin_height_neg" 58 "chin_height_neg" 116 } - gene_chin_width={ "chin_width_neg" 163 "chin_width_neg" 118 } - gene_eye_angle={ "eye_angle_neg" 105 "eye_angle_neg" 127 } - gene_eye_depth={ "eye_depth_pos" 108 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 151 "eye_height_pos" 129 } - gene_eye_distance={ "eye_distance_pos" 67 "eye_distance_pos" 137 } - gene_eye_shut={ "eye_shut_neg" 149 "eye_shut_neg" 112 } - gene_forehead_angle={ "forehead_angle_neg" 48 "forehead_angle_neg" 120 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 164 "forehead_brow_height_neg" 106 } - gene_forehead_roundness={ "forehead_roundness_pos" 201 "forehead_roundness_pos" 133 } - gene_forehead_width={ "forehead_width_neg" 22 "forehead_width_neg" 127 } - gene_forehead_height={ "forehead_height_pos" 246 "forehead_height_pos" 149 } - gene_head_height={ "head_height_pos" 159 "head_height_pos" 154 } - gene_head_width={ "head_width_neg" 35 "head_width_neg" 114 } - gene_head_profile={ "head_profile_pos" 53 "head_profile_pos" 128 } - gene_head_top_height={ "head_top_height_neg" 181 "head_top_height_neg" 106 } - gene_head_top_width={ "head_top_width_pos" 224 "head_top_width_pos" 201 } - gene_jaw_angle={ "jaw_angle_pos" 164 "jaw_angle_pos" 130 } - gene_jaw_forward={ "jaw_forward_pos" 96 "jaw_forward_pos" 135 } - gene_jaw_height={ "jaw_height_pos" 110 "jaw_height_pos" 132 } - gene_jaw_width={ "jaw_width_pos" 163 "jaw_width_pos" 144 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 161 "mouth_corner_depth_pos" 137 } - gene_mouth_corner_height={ "mouth_corner_height_neg" 154 "mouth_corner_height_neg" 124 } - gene_mouth_forward={ "mouth_forward_neg" 116 "mouth_forward_neg" 114 } - gene_mouth_height={ "mouth_height_neg" 159 "mouth_height_neg" 117 } - gene_mouth_width={ "mouth_width_neg" 2 "mouth_width_neg" 45 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 54 "mouth_upper_lip_size_pos" 162 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 96 "mouth_lower_lip_size_neg" 32 } - gene_mouth_open={ "mouth_open_neg" 90 "mouth_open_neg" 38 } - gene_neck_length={ "neck_length_neg" 184 "neck_length_neg" 109 } - gene_neck_width={ "neck_width_neg" 138 "neck_width_neg" 100 } - gene_bs_cheek_forward={ "cheek_forward_neg" 61 "cheek_forward_neg" 47 } - gene_bs_cheek_height={ "cheek_height_pos" 48 "cheek_height_pos" 35 } - gene_bs_cheek_width={ "cheek_width_neg" 105 "cheek_width_neg" 29 } - gene_bs_ear_angle={ "ear_angle_neg" 126 "ear_angle_neg" 39 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 136 "ear_inner_shape_pos" 136 } - gene_bs_ear_bend={ "ear_upper_bend_pos" 14 "ear_upper_bend_pos" 14 } - gene_bs_ear_outward={ "ear_outward_neg" 7 "ear_outward_neg" 7 } - gene_bs_ear_size={ "ear_size_pos" 51 "ear_size_pos" 51 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 0 "eye_corner_depth_neg" 9 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 255 "eye_fold_shape_pos" 28 } - gene_bs_eye_size={ "eye_size_neg" 132 "eye_size_neg" 36 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 0 "eye_upper_lid_size_neg" 42 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 0 "forehead_brow_curve_pos" 47 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 91 "forehead_brow_forward_pos" 116 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 42 "forehead_brow_inner_height_pos" 45 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 99 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 2 "forehead_brow_width_pos" 20 } - gene_bs_jaw_def={ "jaw_def_neg" 116 "jaw_def_neg" 51 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 159 "mouth_lower_lip_def_pos" 55 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 123 "mouth_lower_lip_full_pos" 71 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 93 "mouth_lower_lip_pad_pos" 41 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 0 "mouth_lower_lip_width_neg" 32 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 54 "mouth_philtrum_def_pos" 11 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 21 "mouth_philtrum_shape_pos" 21 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 89 "mouth_philtrum_width_neg" 49 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 58 "mouth_upper_lip_def_pos" 43 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 1 "mouth_upper_lip_full_pos" 9 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 175 "mouth_upper_lip_profile_pos" 22 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 117 "mouth_upper_lip_width_pos" 26 } - gene_bs_nose_forward={ "nose_forward_neg" 0 "nose_forward_neg" 40 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 39 } - gene_bs_nose_length={ "nose_length_pos" 33 "nose_length_pos" 116 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 0 "nose_nostril_height_neg" 39 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 195 "nose_nostril_width_neg" 86 } - gene_bs_nose_profile={ "nose_profile_hawk" 177 "nose_profile_hawk" 36 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 0 "nose_ridge_angle_neg" 64 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 4 } - gene_bs_nose_size={ "nose_size_pos" 15 "nose_size_pos" 62 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 0 "nose_tip_angle_pos" 47 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 16 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 198 "nose_tip_width_pos" 48 } - face_detail_cheek_def={ "cheek_def_01" 175 "cheek_def_01" 22 } - face_detail_cheek_fat={ "cheek_fat_04_pos" 113 "cheek_fat_04_pos" 112 } - face_detail_chin_cleft={ "chin_dimple" 48 "chin_dimple" 21 } - face_detail_chin_def={ "chin_def" 103 "chin_def" 23 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 66 "eye_lower_lid_def" 49 } - face_detail_eye_socket={ "eye_socket_02" 54 "eye_socket_02" 25 } - face_detail_nasolabial={ "nasolabial_03" 130 "nasolabial_03" 17 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 255 "nose_ridge_def_neg" 24 } - face_detail_nose_tip_def={ "nose_tip_def" 50 "nose_tip_def" 79 } - face_detail_temple_def={ "temple_def" 229 "temple_def" 245 } - expression_brow_wrinkles={ "brow_wrinkles_04" 255 "brow_wrinkles_04" 82 } - expression_eye_wrinkles={ "eye_wrinkles_01" 114 "eye_wrinkles_01" 85 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 47 "forehead_wrinkles_01" 41 } - expression_other={ "cheek_wrinkles_left_01" 71 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_4" 181 "complexion_4" 172 } - gene_height={ "normal_height" 128 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_full" 147 "body_fat_head_fat_full" 123 } - gene_bs_body_shape={ "body_shape_average_clothed" 59 "body_shape_hourglass_full" 13 } - gene_bs_bust={ "bust_clothes" 221 "bust_shape_2_full" 196 } - gene_age={ "old_4" 87 "old_4" 82 } - gene_eyebrows_shape={ "avg_spacing_lower_thickness" 163 "avg_spacing_lower_thickness" 232 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 233 "layer_2_low_thickness" 175 } - gene_body_hair={ "body_hair_sparse" 0 "body_hair_sparse" 110 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 145 "normal_eyes" 145 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 56 "normal_eyelashes" 39 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 66 "all_hairstyles" 0 } - cloaks={ "no_cloak" 113 "no_cloak" 0 } - clothes={ "fp1_commoner_clothes" 16 "most_clothes" 0 } - headgear={ "no_headgear" 113 "no_headgear" 0 } - legwear={ "western_common_legwear" 222 "all_legwear" 0 } - } - entity={ 1863162561 1863162561 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_linnea_thimren.txt b/common/bookmark_portraits/historical_export_easteregg_linnea_thimren.txt deleted file mode 100644 index ca753bfd..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_linnea_thimren.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_linnea_thimren -historical_export_easteregg_linnea_thimren={ - type=female - id=17599 - age=0.240000 - genes={ hair_color={ 72 202 68 233 } - skin_color={ 76 64 76 64 } - eye_color={ 122 186 180 186 } - gene_chin_forward={ "chin_forward_pos" 187 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 142 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 160 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 127 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 135 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 126 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_neg" 147 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 161 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 110 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 170 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 116 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 130 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 146 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 108 "head_width_pos" 127 } - gene_head_profile={ "head_profile_neg" 80 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 152 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 189 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 81 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 112 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 127 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 179 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 127 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 118 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 152 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 93 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 87 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 58 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 80 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 34 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 85 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 70 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 2 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 39 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 0 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 187 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 50 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 59 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 75 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 42 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 16 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 70 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 50 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 0 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 0 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 2 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 101 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 89 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 63 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 0 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 207 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 96 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 54 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 119 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 203 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 2 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 57 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 186 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 44 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 60 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 0 "complexion_1" 0 } - gene_height={ "normal_height" 158 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_low" 112 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 91 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 169 "bust_clothes" 127 } - gene_age={ "old_2" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 244 "avg_spacing_avg_thickness" 245 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 164 "layer_2_avg_thickness" 110 } - gene_body_hair={ "body_hair_sparse" 127 "body_hair_sparse" 151 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 2 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 168 "all_hairstyles" 0 } - cloaks={ "no_cloak" 48 "no_cloak" 0 } - clothes={ "fp1_commoner_clothes" 97 "most_clothes" 0 } - headgear={ "no_headgear" 48 "no_headgear" 0 } - legwear={ "western_common_legwear" 138 "all_legwear" 0 } - } - entity={ 2697330347 2697330347 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_lucas_ribeiro.txt b/common/bookmark_portraits/historical_export_easteregg_lucas_ribeiro.txt new file mode 100644 index 00000000..b89950e0 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_lucas_ribeiro.txt @@ -0,0 +1,151 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_lucas_ribeiro +historical_export_easteregg_lucas_ribeiro={ + type=male + id=18934 + random_seed=107380979 + age=0.330000 + genes={ hair_color={ 29 243 97 234 } + skin_color={ 85 80 200 119 } + eye_color={ 23 172 13 136 } + gene_chin_forward={ "chin_forward_neg" 120 "chin_forward_neg" 112 } + gene_chin_height={ "chin_height_pos" 134 "chin_height_pos" 134 } + gene_chin_width={ "chin_width_neg" 120 "chin_width_neg" 120 } + gene_eye_angle={ "eye_angle_pos" 132 "eye_angle_pos" 132 } + gene_eye_depth={ "eye_depth_neg" 117 "eye_depth_neg" 125 } + gene_eye_height={ "eye_height_neg" 125 "eye_height_neg" 125 } + gene_eye_distance={ "eye_distance_pos" 122 "eye_distance_pos" 135 } + gene_eye_shut={ "eye_shut_neg" 57 "eye_shut_neg" 112 } + gene_forehead_angle={ "forehead_angle_pos" 128 "forehead_angle_pos" 128 } + gene_forehead_brow_height={ "forehead_brow_height_pos" 162 "forehead_brow_height_pos" 153 } + gene_forehead_roundness={ "forehead_roundness_pos" 218 "forehead_roundness_pos" 218 } + gene_forehead_width={ "forehead_width_neg" 103 "forehead_width_neg" 103 } + gene_forehead_height={ "forehead_height_pos" 126 "forehead_height_pos" 148 } + gene_head_height={ "head_height_neg" 141 "head_height_neg" 78 } + gene_head_width={ "head_width_pos" 190 "head_width_pos" 149 } + gene_head_profile={ "head_profile_neg" 125 "head_profile_neg" 125 } + gene_head_top_height={ "head_top_height_neg" 135 "head_top_height_neg" 115 } + gene_head_top_width={ "head_top_width_pos" 123 "head_top_width_pos" 128 } + gene_jaw_angle={ "jaw_angle_neg" 115 "jaw_angle_neg" 115 } + gene_jaw_forward={ "jaw_forward_pos" 132 "jaw_forward_pos" 164 } + gene_jaw_height={ "jaw_height_neg" 100 "jaw_height_neg" 97 } + gene_jaw_width={ "jaw_width_neg" 95 "jaw_width_neg" 93 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 129 "mouth_corner_depth_pos" 129 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 148 "mouth_corner_height_pos" 139 } + gene_mouth_forward={ "mouth_forward_neg" 112 "mouth_forward_neg" 123 } + gene_mouth_height={ "mouth_height_pos" 139 "mouth_height_pos" 130 } + gene_mouth_width={ "mouth_width_neg" 144 "mouth_width_neg" 123 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 152 "mouth_upper_lip_size_pos" 187 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 123 "mouth_lower_lip_size_neg" 99 } + gene_mouth_open={ "mouth_open_pos" 0 "mouth_open_pos" 150 } + gene_neck_length={ "neck_length_neg" 128 "neck_length_neg" 120 } + gene_neck_width={ "neck_width_neg" 42 "neck_width_neg" 27 } + gene_bs_cheek_forward={ "cheek_forward_neg" 33 "cheek_forward_neg" 4 } + gene_bs_cheek_height={ "cheek_height_neg" 83 "cheek_height_neg" 43 } + gene_bs_cheek_width={ "cheek_width_neg" 91 "cheek_width_pos" 44 } + gene_bs_ear_angle={ "ear_angle_neg" 33 "ear_angle_neg" 33 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 161 "ear_inner_shape_pos" 161 } + gene_bs_ear_bend={ "ear_lower_bend_pos" 49 "ear_lower_bend_pos" 49 } + gene_bs_ear_outward={ "ear_outward_pos" 13 "ear_outward_neg" 56 } + gene_bs_ear_size={ "ear_size_pos" 1 "ear_size_pos" 1 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 37 "eye_corner_depth_pos" 244 } + gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 3 "eye_fold_shape_pos" 155 } + gene_bs_eye_size={ "eye_size_pos" 187 "eye_size_pos" 125 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 41 "eye_upper_lid_size_pos" 16 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 49 "forehead_brow_curve_pos" 29 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 31 "forehead_brow_forward_pos" 46 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 127 "forehead_brow_inner_height_pos" 113 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 33 "forehead_brow_outer_height_neg" 56 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 23 "forehead_brow_width_neg" 26 } + gene_bs_jaw_def={ "jaw_def_neg" 123 "jaw_def_neg" 123 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 112 "mouth_lower_lip_def_pos" 69 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 71 "mouth_lower_lip_full_pos" 92 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 229 "mouth_lower_lip_pad_neg" 81 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 87 "mouth_lower_lip_width_neg" 24 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 102 "mouth_philtrum_def_pos" 5 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 141 "mouth_philtrum_shape_pos" 112 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 15 "mouth_philtrum_width_neg" 18 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 109 "mouth_upper_lip_def_pos" 24 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 179 "mouth_upper_lip_full_pos" 134 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 131 "mouth_upper_lip_profile_pos" 237 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 53 "mouth_upper_lip_width_pos" 102 } + gene_bs_nose_forward={ "nose_forward_pos" 85 "nose_forward_pos" 50 } + gene_bs_nose_height={ "nose_height_neg" 129 "nose_height_neg" 107 } + gene_bs_nose_length={ "nose_length_neg" 39 "nose_length_pos" 48 } + gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 127 "nose_nostril_height_pos" 20 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 21 "nose_nostril_width_pos" 18 } + gene_bs_nose_profile={ "nose_profile_hawk" 107 "nose_profile_hawk" 40 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 33 "nose_ridge_angle_neg" 3 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 59 "nose_ridge_width_pos" 36 } + gene_bs_nose_size={ "nose_size_pos" 19 "nose_size_pos" 19 } + gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 25 "nose_tip_angle_neg" 62 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 41 "nose_tip_forward_pos" 41 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 41 "nose_tip_width_neg" 24 } + face_detail_cheek_def={ "cheek_def_01" 23 "cheek_def_01" 23 } + face_detail_cheek_fat={ "cheek_fat_01_neg" 166 "cheek_fat_04_pos" 160 } + face_detail_chin_cleft={ "chin_dimple" 25 "chin_dimple" 19 } + face_detail_chin_def={ "chin_def_neg" 204 "chin_def_neg" 204 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 46 "eye_lower_lid_def" 38 } + face_detail_eye_socket={ "eye_socket_color_02" 104 "eye_socket_02" 101 } + face_detail_nasolabial={ "nasolabial_03" 114 "nasolabial_03" 24 } + face_detail_nose_ridge_def={ "nose_ridge_def_pos" 94 "nose_ridge_def_pos" 94 } + face_detail_nose_tip_def={ "nose_tip_def" 130 "nose_tip_def" 12 } + face_detail_temple_def={ "temple_def" 113 "temple_def" 113 } + expression_brow_wrinkles={ "brow_wrinkles_04" 9 "brow_wrinkles_04" 9 } + expression_eye_wrinkles={ "eye_wrinkles_01" 255 "eye_wrinkles_01" 216 } + expression_forehead_wrinkles={ "forehead_wrinkles_02" 242 "forehead_wrinkles_02" 129 } + expression_other={ "cheek_wrinkles_both_01" 45 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_beauty_1" 255 "complexion_2" 238 } + gene_height={ "normal_height" 143 "normal_height" 93 } + gene_bs_body_type={ "body_fat_head_fat_medium" 83 "body_fat_head_fat_full" 131 } + gene_bs_body_shape={ "body_shape_average" 224 "body_shape_average" 0 } + gene_bs_bust={ "bust_clothes" 1 "bust_shape_4_full" 4 } + gene_age={ "old_4" 158 "old_4" 158 } + gene_eyebrows_shape={ "avg_spacing_high_thickness" 217 "avg_spacing_high_thickness" 248 } + gene_eyebrows_fullness={ "layer_2_high_thickness" 0 "layer_2_low_thickness" 241 } + gene_body_hair={ "body_hair_sparse" 136 "body_hair_sparse" 136 } + gene_hair_type={ "hair_straight" 114 "hair_straight" 114 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 25 "normal_eyes" 25 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 238 "normal_eyelashes" 238 } + beards={ "no_beard" 28 "no_beard" 0 } + cloaks={ "no_cloak" 20 "no_cloak" 0 } + hairstyles={ "fp3_hairstyles_iranian_straight" 25 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 59 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "western_commoner_clothes" 59 "most_clothes" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 1903276529 1903276529 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=75156179 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_lysann_schlegel.txt b/common/bookmark_portraits/historical_export_easteregg_lysann_schlegel.txt deleted file mode 100644 index 2f34c92b..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_lysann_schlegel.txt +++ /dev/null @@ -1,119 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_lysann_schlegel -historical_export_easteregg_lysann_schlegel={ - type=female - id=16682 - age=0.300000 - genes={ hair_color={ 193 228 193 202 } - skin_color={ 36 56 29 74 } - eye_color={ 123 156 53 142 } - gene_chin_forward={ "chin_forward_pos" 146 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 170 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 127 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 127 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 145 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 150 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 127 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 127 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 127 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 127 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 127 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 182 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 48 "head_width_pos" 127 } - gene_head_profile={ "head_profile_neg" 0 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 130 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 72 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 127 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 142 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 127 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 127 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 127 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 126 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 62 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 158 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 0 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 0 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 0 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 0 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 0 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 0 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 0 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 0 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 0 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 0 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 0 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 0 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 0 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 0 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 0 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 189 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_2" 0 "complexion_1" 0 } - gene_height={ "normal_height" 145 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 184 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 71 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 127 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 235 "avg_spacing_avg_thickness" 235 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 73 "layer_2_avg_thickness" 73 } - gene_body_hair={ "body_hair_sparse" 189 "body_hair_sparse" 189 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 33 "all_hairstyles" 0 } - clothes={ "western_commoner_clothes" 37 "most_clothes" 0 } - headgear={ "no_headgear" 104 "no_headgear" 0 } - legwear={ "western_common_legwear" 37 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_malin_jonsson.txt b/common/bookmark_portraits/historical_export_easteregg_malin_jonsson.txt deleted file mode 100644 index aa518ac9..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_malin_jonsson.txt +++ /dev/null @@ -1,121 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_malin_jonsson -historical_export_easteregg_malin_jonsson={ - type=female - id=16824 - age=0.280000 - genes={ hair_color={ 56 95 18 229 } - skin_color={ 28 34 61 64 } - eye_color={ 253 34 132 190 } - gene_chin_forward={ "chin_forward_pos" 90 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 127 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 132 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 147 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 110 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 122 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 105 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 90 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 160 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 127 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 182 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 200 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 77 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 107 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 191 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 151 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 127 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 90 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 112 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 124 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 86 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 133 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 128 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 127 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 127 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 169 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 73 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 0 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 25 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 72 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_lower_bend_pos" 93 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 38 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 82 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 234 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 105 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 96 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 0 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 0 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 98 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 121 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_neg" 164 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 68 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 30 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 123 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 22 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 151 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 67 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 255 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 86 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 40 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 0 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 152 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 26 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 0 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 0 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 2 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 123 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 86 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_03_pos" 56 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 255 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 154 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 22 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_03" 163 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_03" 0 "forehead_wrinkles_01" 0 } - expression_other={ "nose_wrinkles_01" 101 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 70 "complexion_1" 0 } - gene_height={ "normal_height" 170 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_low" 174 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 255 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 130 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 175 "avg_spacing_avg_thickness" 220 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 113 "layer_2_avg_thickness" 118 } - gene_body_hair={ "body_hair_sparse" 255 "body_hair_sparse" 188 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - gene_scars_battle={ "scars_battle" 255 "scars_battle" 0 } - hairstyles={ "scripted_character_hairstyles_01" 175 "all_hairstyles" 0 } - cloaks={ "fp1_cloak" 209 "no_cloak" 0 } - clothes={ "northern_commoner_clothes" 97 "most_clothes" 0 } - headgear={ "no_headgear" 152 "no_headgear" 0 } - legwear={ "western_common_legwear" 209 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_mathilda_bjarnehed.txt b/common/bookmark_portraits/historical_export_easteregg_mathilda_bjarnehed.txt deleted file mode 100644 index fb0b6167..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_mathilda_bjarnehed.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_mathilda_bjarnehed -historical_export_easteregg_mathilda_bjarnehed={ - type=female - id=17410 - age=0.260000 - genes={ hair_color={ 230 67 187 73 } - skin_color={ 98 100 98 100 } - eye_color={ 214 128 214 128 } - gene_chin_forward={ "chin_forward_pos" 127 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 127 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 127 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 127 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 127 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 127 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 127 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 127 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 127 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 127 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 127 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 127 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 127 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 127 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 127 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 127 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 127 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 127 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 127 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 127 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 0 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 0 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 0 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 0 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 0 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 0 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 0 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 0 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 0 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 0 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 0 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 0 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 0 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 0 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 0 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 0 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 0 "complexion_1" 0 } - gene_height={ "normal_height" 127 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 139 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 0 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 127 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 192 "avg_spacing_avg_thickness" 192 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 106 "layer_2_avg_thickness" 106 } - gene_body_hair={ "body_hair_sparse" 154 "body_hair_sparse" 154 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 10 "all_hairstyles" 0 } - cloaks={ "fp1_cloak" 224 "no_cloak" 0 } - clothes={ "fp1_commoner_clothes" 93 "most_clothes" 0 } - headgear={ "no_headgear" 237 "no_headgear" 0 } - legwear={ "western_common_legwear" 224 "all_legwear" 0 } - } - entity={ 3942081117 3942081117 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_matthew_clohessy.txt b/common/bookmark_portraits/historical_export_easteregg_matthew_clohessy.txt deleted file mode 100644 index a894e287..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_matthew_clohessy.txt +++ /dev/null @@ -1,119 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_matthew_clohessy -historical_export_easteregg_matthew_clohessy={ - type=male - id=17890 - age=0.210000 - genes={ hair_color={ 251 77 233 77 } - skin_color={ 0 26 67 87 } - eye_color={ 255 53 207 147 } - gene_chin_forward={ "chin_forward_pos" 137 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 89 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 114 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 103 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 145 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 123 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 137 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 172 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 128 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 151 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 214 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 67 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 151 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 164 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 140 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 118 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 128 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 158 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 137 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 144 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 99 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 149 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 175 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 137 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 122 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 112 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 136 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 137 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 56 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_neg" 98 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 36 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 43 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 20 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_upper_bend_pos" 66 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 53 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 62 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 77 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 59 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 0 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 0 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 28 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 48 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 30 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 48 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 53 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 53 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 45 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 99 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 146 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 174 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 0 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 3 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 0 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 0 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 70 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 40 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 0 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 122 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_02" 79 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_04_pos" 165 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 45 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 38 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 71 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_04" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 76 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 163 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 129 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_7" 0 "complexion_1" 0 } - gene_height={ "normal_height" 127 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_full" 146 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 71 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 127 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 65 "avg_spacing_avg_thickness" 169 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 124 "layer_2_avg_thickness" 124 } - gene_body_hair={ "body_hair_sparse" 151 "body_hair_sparse" 151 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 145 "all_hairstyles" 0 } - clothes={ "western_war_nobility_clothes" 78 "most_clothes" 0 } - headgear={ "no_headgear" 101 "no_headgear" 0 } - legwear={ "western_war_legwear" 77 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_max_weltz.txt b/common/bookmark_portraits/historical_export_easteregg_max_weltz.txt deleted file mode 100644 index bd790f90..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_max_weltz.txt +++ /dev/null @@ -1,121 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_max_weltz -historical_export_easteregg_max_weltz={ - type=male - id=16372 - age=0.340000 - genes={ hair_color={ 105 251 105 251 } - skin_color={ 1 80 1 80 } - eye_color={ 20 155 20 155 } - gene_chin_forward={ "chin_forward_pos" 154 "chin_forward_pos" 154 } - gene_chin_height={ "chin_height_neg" 125 "chin_height_neg" 125 } - gene_chin_width={ "chin_width_pos" 130 "chin_width_pos" 130 } - gene_eye_angle={ "eye_angle_pos" 134 "eye_angle_pos" 134 } - gene_eye_depth={ "eye_depth_pos" 137 "eye_depth_pos" 137 } - gene_eye_height={ "eye_height_pos" 136 "eye_height_pos" 136 } - gene_eye_distance={ "eye_distance_pos" 136 "eye_distance_pos" 136 } - gene_eye_shut={ "eye_shut_pos" 187 "eye_shut_pos" 187 } - gene_forehead_angle={ "forehead_angle_pos" 151 "forehead_angle_pos" 151 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 110 "forehead_brow_height_neg" 110 } - gene_forehead_roundness={ "forehead_roundness_neg" 117 "forehead_roundness_neg" 117 } - gene_forehead_width={ "forehead_width_neg" 126 "forehead_width_neg" 126 } - gene_forehead_height={ "forehead_height_pos" 165 "forehead_height_pos" 165 } - gene_head_height={ "head_height_pos" 147 "head_height_pos" 147 } - gene_head_width={ "head_width_neg" 103 "head_width_neg" 103 } - gene_head_profile={ "head_profile_pos" 153 "head_profile_pos" 153 } - gene_head_top_height={ "head_top_height_pos" 128 "head_top_height_pos" 128 } - gene_head_top_width={ "head_top_width_pos" 146 "head_top_width_pos" 146 } - gene_jaw_angle={ "jaw_angle_pos" 132 "jaw_angle_pos" 132 } - gene_jaw_forward={ "jaw_forward_neg" 126 "jaw_forward_neg" 126 } - gene_jaw_height={ "jaw_height_neg" 121 "jaw_height_neg" 121 } - gene_jaw_width={ "jaw_width_neg" 80 "jaw_width_neg" 80 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 120 "mouth_corner_depth_neg" 120 } - gene_mouth_corner_height={ "mouth_corner_height_neg" 117 "mouth_corner_height_neg" 117 } - gene_mouth_forward={ "mouth_forward_neg" 124 "mouth_forward_neg" 124 } - gene_mouth_height={ "mouth_height_neg" 116 "mouth_height_neg" 116 } - gene_mouth_width={ "mouth_width_neg" 102 "mouth_width_neg" 102 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 115 "mouth_upper_lip_size_neg" 115 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 140 "mouth_lower_lip_size_pos" 140 } - gene_mouth_open={ "mouth_open_neg" 39 "mouth_open_neg" 39 } - gene_neck_length={ "neck_length_pos" 147 "neck_length_pos" 147 } - gene_neck_width={ "neck_width_pos" 148 "neck_width_pos" 148 } - gene_bs_cheek_forward={ "cheek_forward_neg" 33 "cheek_forward_neg" 33 } - gene_bs_cheek_height={ "cheek_height_neg" 16 "cheek_height_neg" 16 } - gene_bs_cheek_width={ "cheek_width_pos" 9 "cheek_width_pos" 9 } - gene_bs_ear_angle={ "ear_angle_neg" 20 "ear_angle_neg" 20 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 92 "ear_inner_shape_pos" 92 } - gene_bs_ear_bend={ "ear_both_bend_pos" 156 "ear_both_bend_pos" 156 } - gene_bs_ear_outward={ "ear_outward_pos" 13 "ear_outward_pos" 13 } - gene_bs_ear_size={ "ear_size_neg" 45 "ear_size_neg" 45 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 16 "eye_corner_depth_pos" 16 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 40 "eye_fold_shape_pos" 40 } - gene_bs_eye_size={ "eye_size_neg" 68 "eye_size_neg" 68 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 34 "eye_upper_lid_size_neg" 34 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 6 "forehead_brow_curve_neg" 6 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 32 "forehead_brow_forward_neg" 32 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 35 "forehead_brow_inner_height_pos" 35 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 42 "forehead_brow_outer_height_neg" 42 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 35 "forehead_brow_width_pos" 35 } - gene_bs_jaw_def={ "jaw_def_neg" 63 "jaw_def_neg" 63 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 116 "mouth_lower_lip_def_pos" 116 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 119 "mouth_lower_lip_full_neg" 119 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 94 "mouth_lower_lip_pad_neg" 94 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 21 "mouth_lower_lip_width_pos" 21 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 44 "mouth_philtrum_def_pos" 44 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 29 "mouth_philtrum_shape_pos" 29 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 99 "mouth_philtrum_width_pos" 99 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 9 "mouth_upper_lip_def_pos" 9 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 48 "mouth_upper_lip_full_neg" 48 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 53 "mouth_upper_lip_profile_pos" 53 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 0 "mouth_upper_lip_width_neg" 0 } - gene_bs_nose_forward={ "nose_forward_neg" 33 "nose_forward_neg" 33 } - gene_bs_nose_height={ "nose_height_pos" 60 "nose_height_pos" 60 } - gene_bs_nose_length={ "nose_length_neg" 36 "nose_length_neg" 36 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 70 "nose_nostril_height_pos" 70 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 134 "nose_nostril_width_neg" 134 } - gene_bs_nose_profile={ "nose_profile_hawk" 55 "nose_profile_hawk" 55 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 9 "nose_ridge_angle_neg" 9 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 24 "nose_ridge_width_neg" 24 } - gene_bs_nose_size={ "nose_size_pos" 57 "nose_size_pos" 57 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 6 "nose_tip_angle_pos" 6 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 12 "nose_tip_forward_pos" 12 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 76 "nose_tip_width_pos" 76 } - face_detail_cheek_def={ "cheek_def_01" 143 "cheek_def_01" 143 } - face_detail_cheek_fat={ "cheek_fat_01_neg" 187 "cheek_fat_01_neg" 187 } - face_detail_chin_cleft={ "chin_cleft" 13 "chin_cleft" 13 } - face_detail_chin_def={ "chin_def" 16 "chin_def" 16 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 112 "eye_lower_lid_def" 112 } - face_detail_eye_socket={ "eye_socket_03" 171 "eye_socket_03" 171 } - face_detail_nasolabial={ "nasolabial_01" 11 "nasolabial_01" 11 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 19 "nose_ridge_def_pos" 19 } - face_detail_nose_tip_def={ "nose_tip_def" 218 "nose_tip_def" 218 } - face_detail_temple_def={ "temple_def" 128 "temple_def" 128 } - expression_brow_wrinkles={ "brow_wrinkles_01" 12 "brow_wrinkles_01" 12 } - expression_eye_wrinkles={ "eye_wrinkles_01" 255 "eye_wrinkles_01" 223 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 86 "forehead_wrinkles_01" 86 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_2" 221 "complexion_2" 221 } - gene_height={ "normal_height" 139 "normal_height" 139 } - gene_bs_body_type={ "body_fat_head_fat_full" 95 "body_fat_head_fat_full" 115 } - gene_bs_body_shape={ "body_shape_average_clothed" 40 "body_shape_rectangle_half" 0 } - gene_bs_bust={ "bust_clothes" 127 "bust_shape_3_half" 127 } - gene_age={ "old_3" 248 "old_3" 248 } - gene_eyebrows_shape={ "far_spacing_lower_thickness" 178 "far_spacing_lower_thickness" 178 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 252 "layer_2_avg_thickness" 252 } - gene_body_hair={ "body_hair_sparse" 90 "body_hair_sparse" 90 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 205 "normal_eyes" 205 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 214 "normal_eyelashes" 214 } - pose={ "" 255 "" 0 } - gene_scars_battle={ "scars_battle" 255 "scars_battle" 0 } - beards={ "scripted_character_beards_01" 68 "no_beard" 0 } - hairstyles={ "scripted_character_hairstyles_01" 51 "all_hairstyles" 0 } - clothes={ "western_commoner_clothes" 71 "most_clothes" 0 } - headgear={ "no_headgear" 201 "no_headgear" 0 } - legwear={ "western_common_legwear" 71 "all_legwear" 0 } - } - entity={ 2697330347 2697330347 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_maximilian_olbers.txt b/common/bookmark_portraits/historical_export_easteregg_maximilian_olbers.txt deleted file mode 100644 index b8d9bd99..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_maximilian_olbers.txt +++ /dev/null @@ -1,121 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_maximilian_olbers -historical_export_easteregg_maximilian_olbers={ - type=male - id=16506 - age=0.320000 - genes={ hair_color={ 172 220 158 100 } - skin_color={ 43 65 43 65 } - eye_color={ 123 145 96 180 } - gene_chin_forward={ "chin_forward_pos" 124 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 135 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 116 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 128 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 163 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 80 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 122 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 146 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 128 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 91 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 142 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 127 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 127 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 123 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 116 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 130 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 110 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 123 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 61 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 108 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 128 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 109 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 186 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 72 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 127 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 127 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_neg" 118 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 90 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 0 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 109 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 0 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 144 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 26 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 66 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 56 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 0 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 99 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 30 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 67 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 101 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 201 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 175 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 100 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 44 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_neg" 119 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 0 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 0 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 10 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 0 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 26 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 238 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 85 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 0 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 87 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 182 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_02" 2 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 2 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 136 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 24 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 35 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 51 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_5" 209 "complexion_1" 0 } - gene_height={ "normal_height" 127 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 146 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 61 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 127 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 220 "avg_spacing_avg_thickness" 249 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 82 "layer_2_avg_thickness" 100 } - gene_body_hair={ "body_hair_sparse" 97 "body_hair_sparse" 97 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - beards={ "scripted_character_beards_01" 28 "no_beard" 0 } - hairstyles={ "scripted_character_hairstyles_01" 15 "all_hairstyles" 0 } - cloaks={ "no_cloak" 78 "no_cloak" 0 } - clothes={ "western_prison" 190 "most_clothes" 0 } - headgear={ "no_headgear" 78 "no_headgear" 0 } - legwear={ "western_common_legwear" 62 "all_legwear" 0 } - } - entity={ 2697330347 2697330347 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_milla_lankinen.txt b/common/bookmark_portraits/historical_export_easteregg_milla_lankinen.txt deleted file mode 100644 index 1d580318..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_milla_lankinen.txt +++ /dev/null @@ -1,119 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_milla_lankinen -historical_export_easteregg_milla_lankinen={ - type=female - id=16442 - age=0.330000 - genes={ hair_color={ 142 164 243 116 } - skin_color={ 20 98 20 98 } - eye_color={ 215 182 215 182 } - gene_chin_forward={ "chin_forward_pos" 127 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 127 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 127 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 127 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 127 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 127 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 127 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 127 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 127 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 127 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 127 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 127 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 127 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 127 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 127 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 127 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 127 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 127 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 127 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 127 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 0 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 0 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 0 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 0 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 0 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 0 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 0 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 0 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 0 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 0 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 0 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 0 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 0 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 0 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 0 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 0 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_both_01" 178 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 0 "complexion_1" 0 } - gene_height={ "normal_height" 127 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 162 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 102 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 127 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 221 "avg_spacing_avg_thickness" 221 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 111 "layer_2_avg_thickness" 111 } - gene_body_hair={ "body_hair_sparse" 167 "body_hair_sparse" 167 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 137 "all_hairstyles" 0 } - clothes={ "northern_commoner_clothes" 201 "most_clothes" 0 } - headgear={ "no_headgear" 113 "no_headgear" 0 } - legwear={ "western_common_legwear" 225 "all_legwear" 0 } - } - entity={ 807438772 807438772 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_nicholas_meredith.txt b/common/bookmark_portraits/historical_export_easteregg_nicholas_meredith.txt deleted file mode 100644 index 61e287b3..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_nicholas_meredith.txt +++ /dev/null @@ -1,123 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_nicholas_meredith -historical_export_easteregg_nicholas_meredith={ - type=male - id=18887 - age=0.270000 - genes={ hair_color={ 123 234 123 234 } - skin_color={ 112 100 112 100 } - eye_color={ 84 136 84 136 } - gene_chin_forward={ "chin_forward_neg" 107 "chin_forward_neg" 107 } - gene_chin_height={ "chin_height_neg" 115 "chin_height_neg" 115 } - gene_chin_width={ "chin_width_neg" 126 "chin_width_neg" 126 } - gene_eye_angle={ "eye_angle_neg" 117 "eye_angle_neg" 117 } - gene_eye_depth={ "eye_depth_neg" 115 "eye_depth_neg" 115 } - gene_eye_height={ "eye_height_pos" 147 "eye_height_pos" 147 } - gene_eye_distance={ "eye_distance_neg" 72 "eye_distance_neg" 72 } - gene_eye_shut={ "eye_shut_pos" 138 "eye_shut_pos" 138 } - gene_forehead_angle={ "forehead_angle_pos" 130 "forehead_angle_pos" 130 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 162 "forehead_brow_height_pos" 162 } - gene_forehead_roundness={ "forehead_roundness_pos" 195 "forehead_roundness_pos" 195 } - gene_forehead_width={ "forehead_width_pos" 136 "forehead_width_pos" 136 } - gene_forehead_height={ "forehead_height_pos" 146 "forehead_height_pos" 146 } - gene_head_height={ "head_height_neg" 109 "head_height_neg" 109 } - gene_head_width={ "head_width_neg" 79 "head_width_neg" 79 } - gene_head_profile={ "head_profile_pos" 127 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 136 "head_top_height_pos" 136 } - gene_head_top_width={ "head_top_width_pos" 153 "head_top_width_pos" 153 } - gene_jaw_angle={ "jaw_angle_neg" 119 "jaw_angle_neg" 119 } - gene_jaw_forward={ "jaw_forward_neg" 123 "jaw_forward_neg" 123 } - gene_jaw_height={ "jaw_height_neg" 126 "jaw_height_neg" 126 } - gene_jaw_width={ "jaw_width_neg" 92 "jaw_width_neg" 92 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 121 "mouth_corner_depth_neg" 121 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 128 "mouth_corner_height_pos" 128 } - gene_mouth_forward={ "mouth_forward_pos" 140 "mouth_forward_pos" 140 } - gene_mouth_height={ "mouth_height_neg" 115 "mouth_height_neg" 115 } - gene_mouth_width={ "mouth_width_neg" 106 "mouth_width_neg" 106 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 136 "mouth_upper_lip_size_pos" 136 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 92 "mouth_lower_lip_size_neg" 92 } - gene_mouth_open={ "mouth_open_neg" 63 "mouth_open_neg" 63 } - gene_neck_length={ "neck_length_neg" 110 "neck_length_neg" 110 } - gene_neck_width={ "neck_width_neg" 123 "neck_width_neg" 123 } - gene_bs_cheek_forward={ "cheek_forward_neg" 0 "cheek_forward_neg" 86 } - gene_bs_cheek_height={ "cheek_height_pos" 0 "cheek_height_pos" 51 } - gene_bs_cheek_width={ "cheek_width_neg" 0 "cheek_width_neg" 46 } - gene_bs_ear_angle={ "ear_angle_neg" 0 "ear_angle_neg" 31 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 36 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 53 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 9 } - gene_bs_ear_size={ "ear_size_neg" 0 "ear_size_neg" 1 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 183 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 183 } - gene_bs_eye_size={ "eye_size_neg" 0 "eye_size_neg" 3 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 0 "eye_upper_lid_size_pos" 12 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 0 "forehead_brow_curve_neg" 170 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 84 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 0 "forehead_brow_inner_height_pos" 10 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 0 "forehead_brow_outer_height_neg" 3 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 0 "forehead_brow_width_pos" 21 } - gene_bs_jaw_def={ "jaw_def_neg" 0 "jaw_def_neg" 86 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 68 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 0 "mouth_lower_lip_full_neg" 35 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 0 "mouth_lower_lip_pad_neg" 109 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 0 "mouth_lower_lip_width_neg" 12 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 37 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 25 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 0 "mouth_philtrum_width_neg" 53 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 44 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 33 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 47 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 102 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 21 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 46 } - gene_bs_nose_length={ "nose_length_neg" 0 "nose_length_neg" 16 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 0 "nose_nostril_height_neg" 2 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 0 "nose_nostril_width_neg" 127 } - gene_bs_nose_profile={ "nose_profile_hawk" 0 "nose_profile_hawk" 9 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 0 "nose_ridge_angle_pos" 115 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 0 "nose_ridge_width_neg" 29 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 36 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 0 "nose_tip_angle_pos" 15 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 4 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 0 "nose_tip_width_neg" 187 } - face_detail_cheek_def={ "cheek_def_01" 2 "cheek_def_01" 2 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 215 "cheek_fat_01_pos" 215 } - face_detail_chin_cleft={ "chin_dimple" 15 "chin_dimple" 15 } - face_detail_chin_def={ "chin_def" 5 "chin_def" 5 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 222 "eye_lower_lid_def" 222 } - face_detail_eye_socket={ "eye_socket_03" 247 "eye_socket_03" 247 } - face_detail_nasolabial={ "nasolabial_03" 35 "nasolabial_03" 35 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 3 "nose_ridge_def_pos" 3 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 229 "temple_def" 229 } - expression_brow_wrinkles={ "brow_wrinkles_04" 44 "brow_wrinkles_04" 44 } - expression_eye_wrinkles={ "eye_wrinkles_03" 255 "eye_wrinkles_03" 130 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 40 "forehead_wrinkles_01" 40 } - expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_2" 98 "complexion_2" 98 } - gene_height={ "normal_height" 127 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_low" 156 "body_fat_head_fat_low" 146 } - gene_bs_body_shape={ "body_shape_pear_half" 202 "body_shape_pear_half" 19 } - gene_bs_bust={ "bust_clothes" 71 "bust_shape_3_full" 89 } - gene_age={ "old_4" 12 "old_4" 12 } - gene_eyebrows_shape={ "far_spacing_avg_thickness" 166 "far_spacing_avg_thickness" 166 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 225 "layer_2_low_thickness" 225 } - gene_body_hair={ "body_hair_sparse" 103 "body_hair_sparse" 103 } - gene_hair_type={ "hair_straight" 152 "hair_straight" 152 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 91 "normal_eyes" 91 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 147 "normal_eyelashes" 147 } - pose={ "" 255 "" 0 } - special_headgear_face_mask={ "face_mask" 127 "face_mask" 0 } - beards={ "northern_beards_straight" 156 "no_beard" 0 } - cloaks={ "fp1_cloak_berserker" 166 "no_cloak" 0 } - clothes={ "northern_commoner_clothes" 96 "most_clothes" 0 } - hairstyles={ "northern_hairstyles_straight" 70 "all_hairstyles" 0 } - headgear={ "northern_common" 14 "no_headgear" 0 } - legwear={ "western_common_legwear" 224 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_nikolaos_kaltsogiannis.txt b/common/bookmark_portraits/historical_export_easteregg_nikolaos_kaltsogiannis.txt deleted file mode 100644 index 22c10459..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_nikolaos_kaltsogiannis.txt +++ /dev/null @@ -1,119 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_nikolaos_kaltsogiannis -historical_export_easteregg_nikolaos_kaltsogiannis={ - type=male - id=16687 - age=0.290000 - genes={ hair_color={ 147 240 107 108 } - skin_color={ 85 83 85 83 } - eye_color={ 200 181 200 181 } - gene_chin_forward={ "chin_forward_pos" 127 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 127 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 127 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 127 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 127 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 127 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 127 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 127 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 127 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 127 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 127 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 127 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 127 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 127 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 127 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 127 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 127 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 127 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 127 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 127 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 0 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 0 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 0 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 0 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 0 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 0 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 0 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 0 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 0 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 0 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 0 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 21 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 0 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 0 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 0 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_02" 255 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 255 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 189 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 188 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 153 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 142 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 0 "complexion_1" 0 } - gene_height={ "normal_height" 165 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_low" 255 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 132 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 127 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 156 "avg_spacing_avg_thickness" 156 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 85 "layer_2_avg_thickness" 85 } - gene_body_hair={ "body_hair_sparse" 123 "body_hair_sparse" 123 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - beards={ "scripted_character_beards_01" 28 "no_beard" 0 } - clothes={ "byzantine_commoner_clothes" 125 "most_clothes" 0 } - headgear={ "no_headgear" 74 "no_headgear" 0 } - legwear={ "western_common_legwear" 248 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_ola_jentzsch.txt b/common/bookmark_portraits/historical_export_easteregg_ola_jentzsch.txt deleted file mode 100644 index 88293f06..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_ola_jentzsch.txt +++ /dev/null @@ -1,122 +0,0 @@ -historical_export_easteregg_ola_jentzsch={ - type=male - id=0 - age=0.390000 - genes={ hair_color={ 25 164 206 238 } - skin_color={ 115 53 75 94 } - eye_color={ 169 129 232 204 } - gene_chin_forward={ "chin_forward_pos" 168 "chin_forward_pos" 140 } - gene_chin_height={ "chin_height_neg" 99 "chin_height_neg" 116 } - gene_chin_width={ "chin_width_pos" 198 "chin_width_pos" 150 } - gene_eye_angle={ "eye_angle_pos" 130 "eye_angle_pos" 139 } - gene_eye_depth={ "eye_depth_neg" 28 "eye_depth_neg" 119 } - gene_eye_height={ "eye_height_neg" 73 "eye_height_neg" 114 } - gene_eye_distance={ "eye_distance_neg" 99 "eye_distance_neg" 125 } - gene_eye_shut={ "eye_shut_pos" 157 "eye_shut_pos" 143 } - gene_forehead_angle={ "forehead_angle_pos" 58 "forehead_angle_pos" 130 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 174 "forehead_brow_height_pos" 162 } - gene_forehead_roundness={ "forehead_roundness_pos" 197 "forehead_roundness_pos" 148 } - gene_forehead_width={ "forehead_width_pos" 206 "forehead_width_pos" 150 } - gene_forehead_height={ "forehead_height_neg" 255 "forehead_height_neg" 81 } - gene_head_height={ "head_height_pos" 152 "head_height_pos" 148 } - gene_head_width={ "head_width_pos" 204 "head_width_pos" 133 } - gene_head_profile={ "head_profile_neg" 169 "head_profile_neg" 124 } - gene_head_top_height={ "head_top_height_neg" 134 "head_top_height_neg" 117 } - gene_head_top_width={ "head_top_width_pos" 26 "head_top_width_pos" 150 } - gene_jaw_angle={ "jaw_angle_neg" 96 "jaw_angle_neg" 106 } - gene_jaw_forward={ "jaw_forward_neg" 122 "jaw_forward_neg" 122 } - gene_jaw_height={ "jaw_height_neg" 74 "jaw_height_neg" 123 } - gene_jaw_width={ "jaw_width_neg" 116 "jaw_width_neg" 116 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 116 "mouth_corner_depth_neg" 116 } - gene_mouth_corner_height={ "mouth_corner_height_neg" 123 "mouth_corner_height_neg" 123 } - gene_mouth_forward={ "mouth_forward_neg" 124 "mouth_forward_neg" 124 } - gene_mouth_height={ "mouth_height_pos" 137 "mouth_height_pos" 137 } - gene_mouth_width={ "mouth_width_neg" 121 "mouth_width_neg" 121 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 102 "mouth_upper_lip_size_neg" 102 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 72 "mouth_lower_lip_size_neg" 117 } - gene_mouth_open={ "mouth_open_neg" 18 "mouth_open_neg" 18 } - gene_neck_length={ "neck_length_neg" 125 "neck_length_neg" 121 } - gene_neck_width={ "neck_width_neg" 170 "neck_width_neg" 118 } - gene_bs_cheek_forward={ "cheek_forward_pos" 191 "cheek_forward_pos" 41 } - gene_bs_cheek_height={ "cheek_height_pos" 67 "cheek_height_neg" 11 } - gene_bs_cheek_width={ "cheek_width_neg" 48 "cheek_width_neg" 48 } - gene_bs_ear_angle={ "ear_angle_neg" 197 "ear_angle_neg" 117 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 48 } - gene_bs_ear_bend={ "ear_lower_bend_pos" 86 "ear_upper_bend_pos" 5 } - gene_bs_ear_outward={ "ear_outward_neg" 3 "ear_outward_pos" 41 } - gene_bs_ear_size={ "ear_size_pos" 101 "ear_size_neg" 14 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 55 "eye_corner_depth_pos" 3 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 123 "eye_fold_shape_pos" 139 } - gene_bs_eye_size={ "eye_size_neg" 63 "eye_size_neg" 22 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 165 "eye_upper_lid_size_neg" 24 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 25 "forehead_brow_curve_neg" 47 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 25 "forehead_brow_forward_pos" 8 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 80 "forehead_brow_inner_height_pos" 80 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 18 "forehead_brow_outer_height_neg" 18 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 25 "forehead_brow_width_pos" 25 } - gene_bs_jaw_def={ "jaw_def_neg" 2 "jaw_def_neg" 2 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 44 "mouth_lower_lip_def_pos" 44 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 58 "mouth_lower_lip_full_pos" 58 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 249 "mouth_lower_lip_pad_pos" 111 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 123 "mouth_lower_lip_width_neg" 62 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 41 "mouth_philtrum_def_pos" 41 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 23 "mouth_philtrum_shape_neg" 23 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 34 "mouth_philtrum_width_neg" 34 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 13 "mouth_upper_lip_def_pos" 13 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 37 "mouth_upper_lip_full_pos" 37 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 16 "mouth_upper_lip_profile_pos" 16 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 61 "mouth_upper_lip_width_neg" 61 } - gene_bs_nose_forward={ "nose_forward_neg" 11 "nose_forward_neg" 11 } - gene_bs_nose_height={ "nose_height_pos" 117 "nose_height_pos" 118 } - gene_bs_nose_length={ "nose_length_pos" 45 "nose_length_pos" 8 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 95 "nose_nostril_height_pos" 95 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 122 "nose_nostril_width_pos" 122 } - gene_bs_nose_profile={ "nose_profile_neg" 13 "nose_profile_pos" 28 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 157 "nose_ridge_angle_neg" 12 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 9 "nose_ridge_width_pos" 73 } - gene_bs_nose_size={ "nose_size_neg" 255 "nose_size_neg" 113 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 12 "nose_tip_angle_pos" 12 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 121 "nose_tip_forward_pos" 121 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 27 "nose_tip_width_pos" 27 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 5 } - face_detail_cheek_fat={ "cheek_fat_03_pos" 193 "cheek_fat_04_pos" 87 } - face_detail_chin_cleft={ "chin_cleft" 12 "chin_cleft" 17 } - face_detail_chin_def={ "chin_def_neg" 189 "chin_def" 148 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 189 "eye_lower_lid_def" 154 } - face_detail_eye_socket={ "eye_socket_02" 15 "eye_socket_01" 15 } - face_detail_nasolabial={ "nasolabial_02" 5 "nasolabial_02" 5 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 11 "nose_ridge_def_pos" 196 } - face_detail_nose_tip_def={ "nose_tip_def" 218 "nose_tip_def" 218 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 229 } - expression_brow_wrinkles={ "brow_wrinkles_04" 50 "brow_wrinkles_04" 50 } - expression_eye_wrinkles={ "eye_wrinkles_01" 9 "eye_wrinkles_01" 9 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 31 "forehead_wrinkles_01" 31 } - expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_6" 127 "complexion_3" 127 } - gene_height={ "normal_height" 181 "normal_height" 128 } - gene_bs_body_type={ "body_fat_head_fat_full" 201 "body_fat_head_fat_low" 131 } - gene_bs_body_shape={ "body_shape_rectangle_half" 121 "body_shape_rectangle_half" 19 } - gene_bs_bust={ "bust_clothes" 52 "bust_default" 83 } - gene_age={ "old_4" 67 "old_4" 67 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 104 "avg_spacing_avg_thickness" 131 } - gene_eyebrows_fullness={ "layer_2_lower_thickness" 95 "layer_2_lower_thickness" 137 } - gene_body_hair={ "body_hair_avg" 124 "body_hair_avg" 124 } - gene_hair_type={ "hair_wavy" 148 "hair_wavy" 148 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 187 "normal_eyes" 187 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 48 "normal_eyelashes" 48 } - hairstyles={ "fp1_hairstyles_wavy" 255 "all_hairstyles" 0 } - cloaks={ "fp1_cloak" 59 "no_cloak" 0 } - beards={ "thin_beards_straight" 255 "no_beard" 0 } - clothes={ "religious_buddhist_high_clothes" 270 "most_clothes" 0 } - } - override={ - portrait_modifier_overrides={ - custom_hair=male_hair_fp1_09 - custom_beards=male_beard_steppe_02 - } - } - - entity={ 0 0 } -} diff --git a/common/bookmark_portraits/historical_export_easteregg_olof_bjork.txt b/common/bookmark_portraits/historical_export_easteregg_olof_bjork.txt deleted file mode 100644 index 1c6eaaae..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_olof_bjork.txt +++ /dev/null @@ -1,122 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_olof_bjork -historical_export_easteregg_olof_bjork={ - type=male - id=15985 - age=0.380000 - genes={ hair_color={ 124 132 137 81 } - skin_color={ 86 0 104 79 } - eye_color={ 255 57 56 190 } - gene_chin_forward={ "chin_forward_pos" 127 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 127 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 108 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 94 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 121 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 127 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 127 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 127 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 136 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 165 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 169 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 214 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 89 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 140 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 170 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 146 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_neg" 141 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 145 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 117 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 108 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 155 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 156 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 173 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 159 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 130 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 155 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 150 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 82 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 38 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_neg" 160 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 49 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 127 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 33 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 35 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 67 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 2 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 11 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 20 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 195 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 75 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 2 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 63 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 1 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 0 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 89 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 65 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 0 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_neg" 124 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 34 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 100 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 0 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 1 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 12 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 179 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_dimple" 126 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 196 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_03" 178 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 96 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_02" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_02" 137 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_both_01" 178 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_2" 33 "complexion_1" 0 } - gene_height={ "normal_height" 175 "normal_height" 127 } - gene_bs_body_type={ "body_average" 102 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 47 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 165 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 131 "avg_spacing_avg_thickness" 223 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 103 "layer_2_avg_thickness" 103 } - gene_body_hair={ "body_hair_sparse" 145 "body_hair_sparse" 138 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "bloodshot_eyes" 127 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - gene_illness={ "illness" 255 "illness" 0 } - beards={ "scripted_character_beards_01" 28 "no_beard" 0 } - hairstyles={ "scripted_character_hairstyles_01" 15 "all_hairstyles" 0 } - cloaks={ "no_cloak" 238 "no_cloak" 0 } - clothes={ "western_sickness" 66 "most_clothes" 0 } - headgear={ "no_headgear" 238 "no_headgear" 0 } - legwear={ "western_common_legwear" 176 "all_legwear" 0 } - } - entity={ 807438772 807438772 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_oscar_andersson.txt b/common/bookmark_portraits/historical_export_easteregg_oscar_andersson.txt new file mode 100644 index 00000000..09b6642e --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_oscar_andersson.txt @@ -0,0 +1,163 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_oscar_andersson +historical_export_easteregg_oscar_andersson={ + type=male + id=19313 + random_seed=3759040815 + age=0.290000 + genes={ hair_color={ 86 56 86 56 } + skin_color={ 24 79 24 79 } + eye_color={ 96 163 96 163 } + gene_chin_forward={ "chin_forward_pos" 152 "chin_forward_pos" 152 } + gene_chin_height={ "chin_height_pos" 139 "chin_height_pos" 139 } + gene_chin_width={ "chin_width_pos" 130 "chin_width_pos" 130 } + gene_eye_angle={ "eye_angle_neg" 114 "eye_angle_neg" 114 } + gene_eye_depth={ "eye_depth_neg" 122 "eye_depth_neg" 122 } + gene_eye_height={ "eye_height_neg" 126 "eye_height_neg" 126 } + gene_eye_distance={ "eye_distance_pos" 136 "eye_distance_pos" 136 } + gene_eye_shut={ "eye_shut_neg" 124 "eye_shut_neg" 124 } + gene_forehead_angle={ "forehead_angle_pos" 147 "forehead_angle_pos" 147 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 109 "forehead_brow_height_neg" 109 } + gene_forehead_roundness={ "forehead_roundness_pos" 179 "forehead_roundness_pos" 179 } + gene_forehead_width={ "forehead_width_neg" 107 "forehead_width_neg" 107 } + gene_forehead_height={ "forehead_height_pos" 144 "forehead_height_pos" 144 } + gene_head_height={ "head_height_neg" 78 "head_height_neg" 78 } + gene_head_width={ "head_width_pos" 175 "head_width_pos" 175 } + gene_head_profile={ "head_profile_neg" 118 "head_profile_neg" 118 } + gene_head_top_height={ "head_top_height_pos" 139 "head_top_height_pos" 139 } + gene_head_top_width={ "head_top_width_neg" 125 "head_top_width_neg" 125 } + gene_jaw_angle={ "jaw_angle_pos" 148 "jaw_angle_pos" 148 } + gene_jaw_forward={ "jaw_forward_neg" 91 "jaw_forward_neg" 91 } + gene_jaw_height={ "jaw_height_pos" 133 "jaw_height_pos" 133 } + gene_jaw_width={ "jaw_width_pos" 160 "jaw_width_pos" 160 } + gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 128 "mouth_corner_height_pos" 128 } + gene_mouth_forward={ "mouth_forward_neg" 124 "mouth_forward_neg" 124 } + gene_mouth_height={ "mouth_height_pos" 148 "mouth_height_pos" 148 } + gene_mouth_width={ "mouth_width_neg" 119 "mouth_width_neg" 119 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 111 "mouth_upper_lip_size_neg" 111 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 120 "mouth_lower_lip_size_neg" 120 } + gene_mouth_open={ "mouth_open_neg" 38 "mouth_open_neg" 38 } + gene_neck_length={ "neck_length_neg" 114 "neck_length_neg" 114 } + gene_neck_width={ "neck_width_neg" 102 "neck_width_neg" 102 } + gene_bs_cheek_forward={ "cheek_forward_neg" 33 "cheek_forward_neg" 33 } + gene_bs_cheek_height={ "cheek_height_pos" 46 "cheek_height_pos" 46 } + gene_bs_cheek_width={ "cheek_width_pos" 28 "cheek_width_pos" 28 } + gene_bs_ear_angle={ "ear_angle_pos" 8 "ear_angle_pos" 8 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 46 "ear_inner_shape_pos" 46 } + gene_bs_ear_bend={ "ear_lower_bend_pos" 5 "ear_lower_bend_pos" 5 } + gene_bs_ear_outward={ "ear_outward_pos" 78 "ear_outward_pos" 78 } + gene_bs_ear_size={ "ear_size_neg" 21 "ear_size_neg" 21 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 171 "eye_corner_depth_pos" 171 } + gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 45 "eye_fold_shape_pos" 45 } + gene_bs_eye_size={ "eye_size_pos" 14 "eye_size_pos" 14 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 39 "eye_upper_lid_size_neg" 39 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 115 "forehead_brow_curve_pos" 115 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 26 "forehead_brow_forward_neg" 26 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 30 "forehead_brow_inner_height_neg" 30 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 15 "forehead_brow_outer_height_neg" 15 } + gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 112 "forehead_brow_width_neg" 112 } + gene_bs_jaw_def={ "jaw_def_neg" 111 "jaw_def_neg" 111 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 128 "mouth_lower_lip_def_pos" 128 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 14 "mouth_lower_lip_full_neg" 14 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 88 "mouth_lower_lip_pad_neg" 88 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 43 "mouth_lower_lip_width_neg" 43 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 49 "mouth_philtrum_def_pos" 49 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 146 "mouth_philtrum_shape_neg" 146 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 22 "mouth_philtrum_width_pos" 22 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 29 "mouth_upper_lip_def_pos" 29 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 27 "mouth_upper_lip_full_neg" 27 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 20 "mouth_upper_lip_profile_neg" 20 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 29 "mouth_upper_lip_width_pos" 29 } + gene_bs_nose_forward={ "nose_forward_pos" 25 "nose_forward_pos" 25 } + gene_bs_nose_height={ "nose_height_neg" 15 "nose_height_neg" 15 } + gene_bs_nose_length={ "nose_length_neg" 100 "nose_length_neg" 100 } + gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 5 "nose_nostril_height_pos" 5 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 160 "nose_nostril_width_neg" 160 } + gene_bs_nose_profile={ "nose_profile_neg" 15 "nose_profile_neg" 15 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 2 "nose_ridge_angle_neg" 2 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 19 "nose_ridge_width_neg" 19 } + gene_bs_nose_size={ "nose_size_pos" 50 "nose_size_pos" 50 } + gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 111 "nose_tip_angle_neg" 111 } + gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 39 "nose_tip_forward_neg" 39 } + gene_bs_nose_tip_width={ "nose_tip_width_neg" 123 "nose_tip_width_neg" 123 } + face_detail_cheek_def={ "cheek_def_01" 2 "cheek_def_01" 2 } + face_detail_cheek_fat={ "cheek_fat_03_pos" 152 "cheek_fat_03_pos" 152 } + face_detail_chin_cleft={ "chin_cleft" 105 "chin_cleft" 105 } + face_detail_chin_def={ "chin_def" 33 "chin_def" 33 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def_02" 209 "eye_lower_lid_def_02" 209 } + face_detail_eye_socket={ "eye_socket_color_03" 167 "eye_socket_color_03" 167 } + face_detail_nasolabial={ "nasolabial_03" 9 "nasolabial_03" 9 } + face_detail_nose_ridge_def={ "nose_ridge_def_pos" 150 "nose_ridge_def_pos" 150 } + face_detail_nose_tip_def={ "nose_tip_def" 36 "nose_tip_def" 36 } + face_detail_temple_def={ "temple_def" 243 "temple_def" 243 } + expression_brow_wrinkles={ "brow_wrinkles_04" 32 "brow_wrinkles_04" 32 } + expression_eye_wrinkles={ "eye_wrinkles_01" 124 "eye_wrinkles_01" 42 } + expression_forehead_wrinkles={ "forehead_wrinkles_02" 162 "forehead_wrinkles_02" 162 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_5" 207 "complexion_5" 207 } + gene_height={ "normal_height" 128 "normal_height" 128 } + gene_bs_body_type={ "body_fat_head_fat_medium" 127 "body_fat_head_fat_medium" 117 } + gene_bs_body_shape={ "body_shape_apple_half" 36 "body_shape_apple_half" 11 } + gene_bs_bust={ "bust_clothes" 74 "bust_shape_3_full" 93 } + gene_age={ "old_4" 37 "old_4" 37 } + gene_eyebrows_shape={ "far_spacing_lower_thickness" 162 "far_spacing_lower_thickness" 162 } + gene_eyebrows_fullness={ "layer_2_low_thickness" 141 "layer_2_low_thickness" 141 } + gene_body_hair={ "body_hair_avg" 146 "body_hair_avg" 146 } + gene_hair_type={ "hair_wavy" 129 "hair_wavy" 129 } + gene_baldness={ "male_pattern_baldness" 212 "male_pattern_baldness" 212 } + eye_accessory={ "normal_eyes" 108 "normal_eyes" 108 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 214 "normal_eyelashes" 214 } + beards={ "northern_beards_straight" 172 "no_beard" 0 } + cloaks={ "no_cloak" 32 "no_cloak" 0 } + hairstyles={ "northern_hairstyles_wavy" 247 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 180 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "northern_commoner_clothes" 152 "most_clothes" 0 } + headgear={ "northern_common" 208 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 2697330347 2697330347 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=2793867254 + invert=no + } + { + hash=3672171019 + invert=no + } + { + hash=1921638387 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=1563190100 + invert=no + } + { + hash=1485265044 + invert=no + } + { + hash=1945936758 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_paul_depre.txt b/common/bookmark_portraits/historical_export_easteregg_paul_depre.txt deleted file mode 100644 index 0b7afb84..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_paul_depre.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_paul_depre -historical_export_easteregg_paul_depre={ - type=male - id=16744 - age=0.280000 - genes={ hair_color={ 98 253 212 199 } - skin_color={ 36 96 58 80 } - eye_color={ 49 228 206 147 } - gene_chin_forward={ "chin_forward_neg" 84 "chin_forward_neg" 84 } - gene_chin_height={ "chin_height_pos" 128 "chin_height_pos" 128 } - gene_chin_width={ "chin_width_neg" 116 "chin_width_neg" 116 } - gene_eye_angle={ "eye_angle_pos" 128 "eye_angle_pos" 128 } - gene_eye_depth={ "eye_depth_neg" 116 "eye_depth_neg" 121 } - gene_eye_height={ "eye_height_neg" 127 "eye_height_neg" 127 } - gene_eye_distance={ "eye_distance_pos" 132 "eye_distance_pos" 129 } - gene_eye_shut={ "eye_shut_pos" 139 "eye_shut_pos" 139 } - gene_forehead_angle={ "forehead_angle_pos" 136 "forehead_angle_pos" 136 } - gene_forehead_brow_height={ "forehead_brow_height_neg" 117 "forehead_brow_height_neg" 117 } - gene_forehead_roundness={ "forehead_roundness_neg" 138 "forehead_roundness_neg" 46 } - gene_forehead_width={ "forehead_width_pos" 135 "forehead_width_pos" 135 } - gene_forehead_height={ "forehead_height_neg" 150 "forehead_height_neg" 45 } - gene_head_height={ "head_height_pos" 166 "head_height_pos" 166 } - gene_head_width={ "head_width_pos" 152 "head_width_pos" 152 } - gene_head_profile={ "head_profile_pos" 131 "head_profile_pos" 132 } - gene_head_top_height={ "head_top_height_pos" 143 "head_top_height_pos" 143 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 100 "jaw_angle_pos" 128 } - gene_jaw_forward={ "jaw_forward_pos" 140 "jaw_forward_pos" 140 } - gene_jaw_height={ "jaw_height_neg" 99 "jaw_height_neg" 99 } - gene_jaw_width={ "jaw_width_pos" 160 "jaw_width_pos" 160 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 181 "mouth_corner_depth_neg" 126 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 130 "mouth_corner_height_pos" 130 } - gene_mouth_forward={ "mouth_forward_pos" 145 "mouth_forward_pos" 145 } - gene_mouth_height={ "mouth_height_neg" 123 "mouth_height_neg" 123 } - gene_mouth_width={ "mouth_width_pos" 140 "mouth_width_pos" 140 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 110 "mouth_upper_lip_size_neg" 110 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 62 "mouth_lower_lip_size_neg" 62 } - gene_mouth_open={ "mouth_open_neg" 67 "mouth_open_neg" 59 } - gene_neck_length={ "neck_length_pos" 148 "neck_length_pos" 148 } - gene_neck_width={ "neck_width_pos" 143 "neck_width_pos" 143 } - gene_bs_cheek_forward={ "cheek_forward_neg" 22 "cheek_forward_neg" 22 } - gene_bs_cheek_height={ "cheek_height_pos" 49 "cheek_height_pos" 49 } - gene_bs_cheek_width={ "cheek_width_pos" 118 "cheek_width_pos" 47 } - gene_bs_ear_angle={ "ear_angle_neg" 43 "ear_angle_neg" 43 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 103 "ear_inner_shape_pos" 103 } - gene_bs_ear_bend={ "ear_upper_bend_pos" 92 "ear_upper_bend_pos" 92 } - gene_bs_ear_outward={ "ear_outward_pos" 20 "ear_outward_pos" 20 } - gene_bs_ear_size={ "ear_size_pos" 36 "ear_size_pos" 36 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 17 "eye_corner_depth_neg" 17 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 140 "eye_fold_shape_pos" 6 } - gene_bs_eye_size={ "eye_size_pos" 74 "eye_size_pos" 74 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 43 "eye_upper_lid_size_pos" 9 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 81 "forehead_brow_curve_pos" 1 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 10 "forehead_brow_forward_pos" 10 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 117 "forehead_brow_inner_height_neg" 117 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 12 "forehead_brow_outer_height_neg" 12 } - gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 13 "forehead_brow_width_neg" 13 } - gene_bs_jaw_def={ "jaw_def_pos" 32 "jaw_def_pos" 32 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 51 "mouth_lower_lip_def_pos" 51 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 23 "mouth_lower_lip_full_neg" 23 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 51 "mouth_lower_lip_pad_neg" 51 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 17 "mouth_lower_lip_width_pos" 17 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 11 "mouth_philtrum_def_pos" 11 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 18 "mouth_philtrum_shape_pos" 18 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 11 "mouth_philtrum_width_neg" 11 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 36 "mouth_upper_lip_def_pos" 36 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 26 "mouth_upper_lip_full_pos" 26 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 110 "mouth_upper_lip_profile_neg" 110 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 60 "mouth_upper_lip_width_neg" 60 } - gene_bs_nose_forward={ "nose_forward_pos" 27 "nose_forward_pos" 27 } - gene_bs_nose_height={ "nose_height_pos" 26 "nose_height_pos" 48 } - gene_bs_nose_length={ "nose_length_neg" 127 "nose_length_neg" 127 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 19 "nose_nostril_height_pos" 19 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 94 "nose_nostril_width_pos" 94 } - gene_bs_nose_profile={ "nose_profile_hawk" 20 "nose_profile_hawk" 11 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 10 "nose_ridge_angle_pos" 10 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 46 "nose_ridge_width_neg" 46 } - gene_bs_nose_size={ "nose_size_pos" 37 "nose_size_pos" 37 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 30 "nose_tip_angle_pos" 30 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 6 "nose_tip_forward_pos" 6 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 115 "nose_tip_width_neg" 115 } - face_detail_cheek_def={ "cheek_def_02" 33 "cheek_def_02" 156 } - face_detail_cheek_fat={ "cheek_fat_02_pos" 170 "cheek_fat_04_pos" 18 } - face_detail_chin_cleft={ "chin_cleft" 4 "chin_cleft" 4 } - face_detail_chin_def={ "chin_def" 24 "chin_def" 24 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 255 "eye_lower_lid_def" 255 } - face_detail_eye_socket={ "eye_socket_01" 70 "eye_socket_01" 70 } - face_detail_nasolabial={ "nasolabial_02" 109 "nasolabial_02" 109 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 18 "nose_ridge_def_pos" 18 } - face_detail_nose_tip_def={ "nose_tip_def" 105 "nose_tip_def" 105 } - face_detail_temple_def={ "temple_def" 5 "temple_def" 5 } - expression_brow_wrinkles={ "brow_wrinkles_02" 185 "brow_wrinkles_01" 20 } - expression_eye_wrinkles={ "eye_wrinkles_01" 132 "eye_wrinkles_01" 36 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 242 "forehead_wrinkles_01" 242 } - expression_other={ "cheek_wrinkles_left_01" 147 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_6" 255 "complexion_7" 213 } - gene_height={ "normal_height" 151 "normal_height" 128 } - gene_bs_body_type={ "body_fat_head_fat_medium" 243 "body_fat_head_fat_medium" 151 } - gene_bs_body_shape={ "body_shape_average_clothed" 0 "body_shape_hourglass_half" 0 } - gene_bs_bust={ "bust_clothes" 88 "bust_shape_3_full" 88 } - gene_age={ "old_beauty_1" 255 "old_1" 7 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 215 "far_spacing_low_thickness" 201 } - gene_eyebrows_fullness={ "layer_2_lower_thickness" 219 "layer_2_avg_thickness" 152 } - gene_body_hair={ "body_hair_avg" 247 "body_hair_avg" 186 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes_dark_iris" 165 "normal_eyes" 121 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 7 "normal_eyelashes" 7 } - pose={ "" 255 "" 0 } - beards={ "scripted_character_beards_01" 51 "no_beard" 0 } - hairstyles={ "scripted_character_hairstyles_01" 68 "all_hairstyles" 0 } - clothes={ "western_commoner_clothes" 211 "most_clothes" 0 } - headgear={ "no_headgear" 48 "no_headgear" 0 } - legwear={ "western_common_legwear" 211 "all_legwear" 0 } - } - entity={ 1955045592 2706025184 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_peter_johannesson.txt b/common/bookmark_portraits/historical_export_easteregg_peter_johannesson.txt deleted file mode 100644 index a1fe7501..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_peter_johannesson.txt +++ /dev/null @@ -1,121 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_peter_johannesson -historical_export_easteregg_peter_johannesson={ - type=male - id=17194 - age=0.260000 - genes={ hair_color={ 255 239 4 234 } - skin_color={ 44 71 5 102 } - eye_color={ 189 196 115 182 } - gene_chin_forward={ "chin_forward_pos" 154 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 127 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 127 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 127 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 146 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_neg" 150 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 152 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 127 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 181 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 221 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 127 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 127 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 146 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 127 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 127 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 127 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 127 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 130 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 76 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 96 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 127 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 29 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 0 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 104 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 2 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_neg" 38 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 82 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 0 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 0 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 103 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 0 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 0 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 66 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 124 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_neg" 44 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 0 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 85 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 45 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 61 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 42 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 0 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 0 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 255 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 109 "forehead_wrinkles_01" 0 } - expression_other={ "nose_wrinkles_01" 229 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 173 "complexion_1" 0 } - gene_height={ "normal_height" 155 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 124 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 20 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 127 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 194 "avg_spacing_avg_thickness" 194 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 79 "layer_2_avg_thickness" 79 } - gene_body_hair={ "body_hair_avg" 150 "body_hair_sparse" 175 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - beards={ "scripted_character_beards_01" 137 "no_beard" 0 } - hairstyles={ "scripted_character_hairstyles_01" 38 "all_hairstyles" 0 } - cloaks={ "fp1_cloak" 59 "no_cloak" 0 } - clothes={ "fp1_commoner_clothes" 102 "most_clothes" 0 } - headgear={ "no_headgear" 26 "no_headgear" 0 } - legwear={ "western_common_legwear" 59 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_petter_vilberg.txt b/common/bookmark_portraits/historical_export_easteregg_petter_vilberg.txt deleted file mode 100644 index f8578786..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_petter_vilberg.txt +++ /dev/null @@ -1,121 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_petter_vilberg -historical_export_easteregg_petter_vilberg={ - type=male - id=16742 - age=0.280000 - genes={ hair_color={ 122 254 115 249 } - skin_color={ 69 92 69 92 } - eye_color={ 52 220 226 161 } - gene_chin_forward={ "chin_forward_pos" 169 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 84 "chin_height_neg" 101 } - gene_chin_width={ "chin_width_pos" 142 "chin_width_pos" 128 } - gene_eye_angle={ "eye_angle_pos" 114 "eye_angle_neg" 121 } - gene_eye_depth={ "eye_depth_neg" 2 "eye_depth_pos" 137 } - gene_eye_height={ "eye_height_pos" 126 "eye_height_pos" 135 } - gene_eye_distance={ "eye_distance_neg" 138 "eye_distance_neg" 116 } - gene_eye_shut={ "eye_shut_pos" 105 "eye_shut_pos" 140 } - gene_forehead_angle={ "forehead_angle_pos" 149 "forehead_angle_neg" 102 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 90 "forehead_brow_height_pos" 145 } - gene_forehead_roundness={ "forehead_roundness_neg" 255 "forehead_roundness_pos" 150 } - gene_forehead_width={ "forehead_width_neg" 102 "forehead_width_neg" 102 } - gene_forehead_height={ "forehead_height_pos" 142 "forehead_height_neg" 106 } - gene_head_height={ "head_height_pos" 130 "head_height_neg" 76 } - gene_head_width={ "head_width_pos" 0 "head_width_pos" 152 } - gene_head_profile={ "head_profile_pos" 130 "head_profile_neg" 81 } - gene_head_top_height={ "head_top_height_pos" 156 "head_top_height_pos" 128 } - gene_head_top_width={ "head_top_width_pos" 132 "head_top_width_pos" 129 } - gene_jaw_angle={ "jaw_angle_pos" 136 "jaw_angle_pos" 134 } - gene_jaw_forward={ "jaw_forward_pos" 158 "jaw_forward_pos" 128 } - gene_jaw_height={ "jaw_height_neg" 122 "jaw_height_neg" 122 } - gene_jaw_width={ "jaw_width_neg" 147 "jaw_width_neg" 86 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 138 "mouth_corner_depth_pos" 138 } - gene_mouth_corner_height={ "mouth_corner_height_neg" 144 "mouth_corner_height_neg" 123 } - gene_mouth_forward={ "mouth_forward_pos" 170 "mouth_forward_neg" 105 } - gene_mouth_height={ "mouth_height_neg" 184 "mouth_height_neg" 123 } - gene_mouth_width={ "mouth_width_neg" 114 "mouth_width_neg" 114 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 99 "mouth_upper_lip_size_neg" 111 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 141 "mouth_lower_lip_size_neg" 123 } - gene_mouth_open={ "mouth_open_neg" 17 "mouth_open_neg" 17 } - gene_neck_length={ "neck_length_pos" 130 "neck_length_pos" 130 } - gene_neck_width={ "neck_width_pos" 160 "neck_width_neg" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 56 "cheek_forward_pos" 134 } - gene_bs_cheek_height={ "cheek_height_pos" 81 "cheek_height_pos" 116 } - gene_bs_cheek_width={ "cheek_width_pos" 12 "cheek_width_neg" 3 } - gene_bs_ear_angle={ "ear_angle_pos" 33 "ear_angle_pos" 33 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 90 "ear_inner_shape_pos" 90 } - gene_bs_ear_bend={ "ear_upper_bend_pos" 12 "ear_upper_bend_pos" 12 } - gene_bs_ear_outward={ "ear_outward_neg" 76 "ear_outward_neg" 40 } - gene_bs_ear_size={ "ear_size_pos" 69 "ear_size_pos" 69 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 71 "eye_corner_depth_neg" 29 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 159 "eye_fold_shape_neg" 136 } - gene_bs_eye_size={ "eye_size_pos" 110 "eye_size_pos" 197 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 224 "eye_upper_lid_size_pos" 9 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 39 "forehead_brow_curve_neg" 187 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 158 "forehead_brow_forward_neg" 6 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 1 "forehead_brow_inner_height_pos" 9 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 100 "forehead_brow_outer_height_neg" 6 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 142 "forehead_brow_width_pos" 59 } - gene_bs_jaw_def={ "jaw_def_neg" 94 "jaw_def_neg" 23 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 17 "mouth_lower_lip_def_pos" 17 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 60 "mouth_lower_lip_full_neg" 60 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 114 "mouth_lower_lip_pad_pos" 114 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 99 "mouth_lower_lip_width_neg" 99 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 21 "mouth_philtrum_def_pos" 21 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 9 "mouth_philtrum_shape_neg" 9 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 40 "mouth_philtrum_width_neg" 40 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 48 "mouth_upper_lip_def_pos" 48 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 23 "mouth_upper_lip_full_neg" 23 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 23 "mouth_upper_lip_profile_neg" 23 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 3 "mouth_upper_lip_width_neg" 3 } - gene_bs_nose_forward={ "nose_forward_pos" 142 "nose_forward_neg" 11 } - gene_bs_nose_height={ "nose_height_pos" 26 "nose_height_pos" 26 } - gene_bs_nose_length={ "nose_length_pos" 61 "nose_length_neg" 44 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 67 "nose_nostril_height_pos" 16 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 14 "nose_nostril_width_neg" 50 } - gene_bs_nose_profile={ "nose_profile_pos" 31 "nose_profile_pos" 23 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 2 "nose_ridge_angle_pos" 38 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 93 "nose_ridge_width_neg" 20 } - gene_bs_nose_size={ "nose_size_pos" 30 "nose_size_neg" 44 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 17 "nose_tip_angle_pos" 84 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 28 "nose_tip_forward_neg" 28 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 54 "nose_tip_width_neg" 186 } - face_detail_cheek_def={ "cheek_def_02" 0 "cheek_def_01" 22 } - face_detail_cheek_fat={ "cheek_fat_03_pos" 144 "cheek_fat_03_pos" 149 } - face_detail_chin_cleft={ "chin_cleft" 142 "chin_cleft" 22 } - face_detail_chin_def={ "chin_def" 1 "chin_def" 116 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 144 "eye_lower_lid_def" 183 } - face_detail_eye_socket={ "eye_socket_01" 156 "eye_socket_03" 2 } - face_detail_nasolabial={ "nasolabial_02" 65 "nasolabial_02" 113 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 0 "nose_ridge_def_pos" 24 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 24 } - face_detail_temple_def={ "temple_def" 48 "temple_def" 36 } - expression_brow_wrinkles={ "brow_wrinkles_03" 127 "brow_wrinkles_03" 231 } - expression_eye_wrinkles={ "eye_wrinkles_01" 178 "eye_wrinkles_01" 6 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 70 "forehead_wrinkles_01" 70 } - expression_other={ "cheek_wrinkles_left_01" 113 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_1" 84 "complexion_4" 147 } - gene_height={ "normal_height" 122 "normal_height" 117 } - gene_bs_body_type={ "body_average" 150 "body_fat_head_fat_low" 114 } - gene_bs_body_shape={ "body_shape_average_clothed" 176 "body_shape_pear_half" 45 } - gene_bs_bust={ "bust_clothes" 109 "bust_shape_3_half" 109 } - gene_age={ "old_1" 65 "old_4" 164 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 146 "avg_spacing_avg_thickness" 136 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 255 "layer_2_avg_thickness" 206 } - gene_body_hair={ "body_hair_avg" 131 "body_hair_sparse" 146 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 164 "normal_eyes" 164 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 255 "normal_eyelashes" 76 } - pose={ "" 255 "" 0 } - beards={ "scripted_character_beards_01" 10 "no_beard" 0 } - hairstyles={ "scripted_character_hairstyles_01" 38 "all_hairstyles" 0 } - cloaks={ "no_cloak" 121 "no_cloak" 0 } - clothes={ "northern_commoner_clothes" 223 "most_clothes" 0 } - headgear={ "no_headgear" 121 "no_headgear" 0 } - legwear={ "western_common_legwear" 70 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_pontus_olofsson.txt b/common/bookmark_portraits/historical_export_easteregg_pontus_olofsson.txt deleted file mode 100644 index b3c15190..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_pontus_olofsson.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_pontus_olofsson -historical_export_easteregg_pontus_olofsson={ - type=male - id=15842 - age=0.400000 - genes={ hair_color={ 54 252 136 121 } - skin_color={ 24 14 39 73 } - eye_color={ 133 205 243 175 } - gene_chin_forward={ "chin_forward_pos" 128 "chin_forward_pos" 160 } - gene_chin_height={ "chin_height_pos" 132 "chin_height_pos" 132 } - gene_chin_width={ "chin_width_neg" 118 "chin_width_neg" 124 } - gene_eye_angle={ "eye_angle_neg" 101 "eye_angle_neg" 126 } - gene_eye_depth={ "eye_depth_pos" 149 "eye_depth_pos" 149 } - gene_eye_height={ "eye_height_neg" 123 "eye_height_neg" 123 } - gene_eye_distance={ "eye_distance_neg" 104 "eye_distance_neg" 127 } - gene_eye_shut={ "eye_shut_pos" 132 "eye_shut_pos" 131 } - gene_forehead_angle={ "forehead_angle_neg" 114 "forehead_angle_neg" 122 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 76 "forehead_brow_height_pos" 153 } - gene_forehead_roundness={ "forehead_roundness_neg" 137 "forehead_roundness_pos" 147 } - gene_forehead_width={ "forehead_width_pos" 68 "forehead_width_neg" 115 } - gene_forehead_height={ "forehead_height_pos" 210 "forehead_height_pos" 210 } - gene_head_height={ "head_height_pos" 142 "head_height_pos" 142 } - gene_head_width={ "head_width_neg" 56 "head_width_neg" 88 } - gene_head_profile={ "head_profile_neg" 28 "head_profile_neg" 38 } - gene_head_top_height={ "head_top_height_neg" 34 "head_top_height_neg" 103 } - gene_head_top_width={ "head_top_width_pos" 225 "head_top_width_pos" 225 } - gene_jaw_angle={ "jaw_angle_neg" 125 "jaw_angle_neg" 125 } - gene_jaw_forward={ "jaw_forward_pos" 128 "jaw_forward_pos" 128 } - gene_jaw_height={ "jaw_height_pos" 127 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_neg" 198 "jaw_width_neg" 119 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 136 "mouth_corner_depth_pos" 136 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 134 "mouth_corner_height_pos" 134 } - gene_mouth_forward={ "mouth_forward_neg" 155 "mouth_forward_neg" 117 } - gene_mouth_height={ "mouth_height_pos" 103 "mouth_height_pos" 138 } - gene_mouth_width={ "mouth_width_neg" 142 "mouth_width_neg" 110 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 61 "mouth_upper_lip_size_neg" 100 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 113 "mouth_lower_lip_size_neg" 113 } - gene_mouth_open={ "mouth_open_neg" 79 "mouth_open_neg" 34 } - gene_neck_length={ "neck_length_neg" 95 "neck_length_neg" 95 } - gene_neck_width={ "neck_width_pos" 61 "neck_width_neg" 108 } - gene_bs_cheek_forward={ "cheek_forward_pos" 61 "cheek_forward_pos" 31 } - gene_bs_cheek_height={ "cheek_height_pos" 21 "cheek_height_pos" 21 } - gene_bs_cheek_width={ "cheek_width_pos" 86 "cheek_width_pos" 31 } - gene_bs_ear_angle={ "ear_angle_neg" 21 "ear_angle_neg" 120 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 156 "ear_inner_shape_pos" 100 } - gene_bs_ear_bend={ "ear_both_bend_pos" 98 "ear_both_bend_pos" 41 } - gene_bs_ear_outward={ "ear_outward_pos" 10 "ear_outward_neg" 79 } - gene_bs_ear_size={ "ear_size_neg" 98 "ear_size_pos" 13 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 121 "eye_corner_depth_pos" 27 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 104 "eye_fold_shape_pos" 29 } - gene_bs_eye_size={ "eye_size_pos" 38 "eye_size_pos" 40 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 111 "eye_upper_lid_size_pos" 111 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 255 "forehead_brow_curve_neg" 154 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 49 "forehead_brow_forward_pos" 38 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 1 "forehead_brow_inner_height_pos" 33 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 103 "forehead_brow_outer_height_pos" 50 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 77 "forehead_brow_width_pos" 74 } - gene_bs_jaw_def={ "jaw_def_neg" 215 "jaw_def_neg" 8 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 17 "mouth_lower_lip_def_pos" 17 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 35 "mouth_lower_lip_full_neg" 10 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 21 "mouth_lower_lip_pad_neg" 8 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 28 "mouth_lower_lip_width_neg" 28 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 99 "mouth_philtrum_def_pos" 44 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 35 "mouth_philtrum_shape_pos" 38 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 112 "mouth_philtrum_width_pos" 112 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 39 "mouth_upper_lip_def_pos" 39 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 20 "mouth_upper_lip_full_neg" 20 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 167 "mouth_upper_lip_profile_neg" 35 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 137 "mouth_upper_lip_width_neg" 24 } - gene_bs_nose_forward={ "nose_forward_neg" 18 "nose_forward_neg" 18 } - gene_bs_nose_height={ "nose_height_neg" 8 "nose_height_neg" 23 } - gene_bs_nose_length={ "nose_length_pos" 74 "nose_length_pos" 74 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 151 "nose_nostril_height_pos" 14 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 113 "nose_nostril_width_neg" 16 } - gene_bs_nose_profile={ "nose_profile_pos" 63 "nose_profile_hawk_pos" 40 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 207 "nose_ridge_angle_pos" 68 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 16 "nose_ridge_width_pos" 18 } - gene_bs_nose_size={ "nose_size_pos" 87 "nose_size_pos" 16 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 99 "nose_tip_angle_pos" 37 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 69 "nose_tip_forward_neg" 69 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 144 "nose_tip_width_pos" 108 } - face_detail_cheek_def={ "cheek_def_02" 0 "cheek_def_01" 19 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 188 "cheek_fat_02_pos" 225 } - face_detail_chin_cleft={ "chin_cleft" 131 "chin_cleft" 22 } - face_detail_chin_def={ "chin_def" 150 "chin_def" 94 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 59 "eye_lower_lid_def" 225 } - face_detail_eye_socket={ "eye_socket_02" 192 "eye_socket_02" 17 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_03" 111 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 137 "nose_ridge_def_neg" 14 } - face_detail_nose_tip_def={ "nose_tip_def" 226 "nose_tip_def" 222 } - face_detail_temple_def={ "temple_def" 5 "temple_def" 129 } - expression_brow_wrinkles={ "brow_wrinkles_01" 45 "brow_wrinkles_01" 50 } - expression_eye_wrinkles={ "eye_wrinkles_01" 128 "eye_wrinkles_01" 128 } - expression_forehead_wrinkles={ "forehead_wrinkles_02" 98 "forehead_wrinkles_02" 172 } - expression_other={ "cheek_wrinkles_right_01" 0 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_3" 151 "complexion_3" 129 } - gene_height={ "normal_height" 181 "normal_height" 134 } - gene_bs_body_type={ "body_fat_head_fat_medium" 120 "body_fat_head_fat_full" 104 } - gene_bs_body_shape={ "body_shape_average_clothed" 126 "body_shape_rectangle_half" 50 } - gene_bs_bust={ "bust_clothes" 111 "bust_shape_1_full" 111 } - gene_age={ "old_3" 119 "old_4" 174 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 225 "avg_spacing_low_thickness" 128 } - gene_eyebrows_fullness={ "layer_2_lower_thickness" 114 "layer_2_lower_thickness" 114 } - gene_body_hair={ "body_hair_sparse" 176 "body_hair_sparse" 176 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 148 "normal_eyes" 148 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 22 "normal_eyelashes" 22 } - pose={ "" 255 "" 0 } - hairstyles={ "western_baby_hairstyles" 122 "all_hairstyles" 0 } - cloaks={ "fp1_cloak" 197 "no_cloak" 0 } - clothes={ "fp1_war_nobility_clothes" 117 "most_clothes" 0 } - headgear={ "no_headgear" 2 "no_headgear" 0 } - legwear={ "western_common_legwear" 197 "all_legwear" 0 } - } - entity={ 616600735 616600735 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_samet_atasoy.txt b/common/bookmark_portraits/historical_export_easteregg_samet_atasoy.txt new file mode 100644 index 00000000..4b4d4ec8 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_samet_atasoy.txt @@ -0,0 +1,142 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_samet_atasoy +historical_export_easteregg_samet_atasoy={ + type=male + id=20402 + random_seed=2082212950 + age=0.220000 + genes={ hair_color={ 33 197 218 241 } + skin_color={ 215 10 146 106 } + eye_color={ 64 155 20 138 } + gene_chin_forward={ "chin_forward_neg" 102 "chin_forward_neg" 126 } + gene_chin_height={ "chin_height_neg" 134 "chin_height_neg" 123 } + gene_chin_width={ "chin_width_pos" 169 "chin_width_pos" 138 } + gene_eye_angle={ "eye_angle_neg" 91 "eye_angle_neg" 124 } + gene_eye_depth={ "eye_depth_neg" 169 "eye_depth_neg" 118 } + gene_eye_height={ "eye_height_neg" 64 "eye_height_neg" 83 } + gene_eye_distance={ "eye_distance_pos" 137 "eye_distance_pos" 147 } + gene_eye_shut={ "eye_shut_neg" 255 "eye_shut_neg" 107 } + gene_forehead_angle={ "forehead_angle_neg" 141 "forehead_angle_neg" 87 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 85 "forehead_brow_height_neg" 127 } + gene_forehead_roundness={ "forehead_roundness_pos" 165 "forehead_roundness_pos" 149 } + gene_forehead_width={ "forehead_width_neg" 135 "forehead_width_neg" 118 } + gene_forehead_height={ "forehead_height_neg" 4 "forehead_height_neg" 110 } + gene_head_height={ "head_height_pos" 130 "head_height_pos" 168 } + gene_head_width={ "head_width_neg" 160 "head_width_neg" 124 } + gene_head_profile={ "head_profile_neg" 116 "head_profile_neg" 111 } + gene_head_top_height={ "head_top_height_neg" 134 "head_top_height_neg" 118 } + gene_head_top_width={ "head_top_width_pos" 134 "head_top_width_pos" 151 } + gene_jaw_angle={ "jaw_angle_neg" 85 "jaw_angle_neg" 85 } + gene_jaw_forward={ "jaw_forward_neg" 133 "jaw_forward_neg" 104 } + gene_jaw_height={ "jaw_height_neg" 133 "jaw_height_neg" 126 } + gene_jaw_width={ "jaw_width_neg" 141 "jaw_width_neg" 96 } + gene_mouth_corner_depth={ "mouth_corner_depth_neg" 158 "mouth_corner_depth_neg" 120 } + gene_mouth_corner_height={ "mouth_corner_height_neg" 199 "mouth_corner_height_neg" 127 } + gene_mouth_forward={ "mouth_forward_pos" 161 "mouth_forward_pos" 131 } + gene_mouth_height={ "mouth_height_neg" 119 "mouth_height_neg" 122 } + gene_mouth_width={ "mouth_width_pos" 125 "mouth_width_pos" 138 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 87 "mouth_upper_lip_size_neg" 123 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 112 "mouth_lower_lip_size_neg" 108 } + gene_mouth_open={ "mouth_open_neg" 0 "mouth_open_neg" 9 } + gene_neck_length={ "neck_length_pos" 91 "neck_length_pos" 136 } + gene_neck_width={ "neck_width_neg" 191 "neck_width_neg" 123 } + gene_bs_cheek_forward={ "cheek_forward_neg" 47 "cheek_forward_pos" 39 } + gene_bs_cheek_height={ "cheek_height_neg" 133 "cheek_height_pos" 4 } + gene_bs_cheek_width={ "cheek_width_neg" 159 "cheek_width_pos" 17 } + gene_bs_ear_angle={ "ear_angle_pos" 7 "ear_angle_neg" 35 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 84 "ear_inner_shape_pos" 51 } + gene_bs_ear_bend={ "ear_lower_bend_pos" 91 "ear_upper_bend_pos" 46 } + gene_bs_ear_outward={ "ear_outward_neg" 1 "ear_outward_neg" 45 } + gene_bs_ear_size={ "ear_size_pos" 109 "ear_size_pos" 101 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 131 "eye_corner_depth_neg" 9 } + gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 41 "eye_fold_shape_pos" 185 } + gene_bs_eye_size={ "eye_size_neg" 51 "eye_size_pos" 108 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 27 "eye_upper_lid_size_pos" 67 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 5 "forehead_brow_curve_neg" 1 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 45 "forehead_brow_forward_pos" 12 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 77 "forehead_brow_inner_height_neg" 116 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 3 "forehead_brow_outer_height_neg" 97 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 21 "forehead_brow_width_pos" 74 } + gene_bs_jaw_def={ "jaw_def_neg" 114 "jaw_def_neg" 114 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 99 "mouth_lower_lip_def_pos" 78 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 61 "mouth_lower_lip_full_neg" 46 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 61 "mouth_lower_lip_pad_neg" 51 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 111 "mouth_lower_lip_width_neg" 23 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 67 "mouth_philtrum_def_pos" 27 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 37 "mouth_philtrum_shape_neg" 11 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 57 "mouth_philtrum_width_neg" 39 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 51 "mouth_upper_lip_def_pos" 21 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 155 "mouth_upper_lip_full_neg" 60 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 181 "mouth_upper_lip_profile_pos" 224 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 177 "mouth_upper_lip_width_pos" 120 } + gene_bs_nose_forward={ "nose_forward_neg" 101 "nose_forward_neg" 101 } + gene_bs_nose_height={ "nose_height_neg" 104 "nose_height_neg" 104 } + gene_bs_nose_length={ "nose_length_neg" 106 "nose_length_neg" 106 } + gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 59 "nose_nostril_height_neg" 17 } + gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 67 "nose_nostril_width_pos" 35 } + gene_bs_nose_profile={ "nose_profile_pos" 45 "nose_profile_pos" 45 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 18 "nose_ridge_angle_pos" 18 } + gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 19 "nose_ridge_width_pos" 0 } + gene_bs_nose_size={ "nose_size_pos" 95 "nose_size_pos" 31 } + gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 117 "nose_tip_angle_neg" 78 } + gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 117 "nose_tip_forward_neg" 46 } + gene_bs_nose_tip_width={ "nose_tip_width_pos" 255 "nose_tip_width_pos" 19 } + face_detail_cheek_def={ "cheek_def_01" 94 "cheek_def_01" 145 } + face_detail_cheek_fat={ "cheek_fat_04_pos" 170 "cheek_fat_01_neg" 70 } + face_detail_chin_cleft={ "chin_cleft" 59 "chin_cleft" 8 } + face_detail_chin_def={ "chin_def_neg" 186 "chin_def_neg" 24 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 167 "eye_lower_lid_def" 142 } + face_detail_eye_socket={ "eye_socket_color_01" 25 "eye_socket_color_03" 8 } + face_detail_nasolabial={ "nasolabial_01" 113 "nasolabial_01" 113 } + face_detail_nose_ridge_def={ "nose_ridge_def_pos" 2 "nose_ridge_def_pos" 2 } + face_detail_nose_tip_def={ "nose_tip_def" 121 "nose_tip_def" 221 } + face_detail_temple_def={ "temple_def" 0 "temple_def" 222 } + expression_brow_wrinkles={ "brow_wrinkles_01" 231 "brow_wrinkles_01" 16 } + expression_eye_wrinkles={ "eye_wrinkles_01" 64 "eye_wrinkles_01" 64 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 42 "forehead_wrinkles_01" 42 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_5" 0 "complexion_5" 143 } + gene_height={ "normal_height" 167 "normal_height" 129 } + gene_bs_body_type={ "body_fat_head_fat_full" 148 "body_fat_head_fat_full" 134 } + gene_bs_body_shape={ "body_shape_hourglass_half" 51 "body_shape_hourglass_half" 0 } + gene_bs_bust={ "bust_clothes" 102 "bust_shape_3_full" 56 } + gene_age={ "old_3" 198 "old_3" 198 } + gene_eyebrows_shape={ "avg_spacing_low_thickness" 134 "far_spacing_avg_thickness" 239 } + gene_eyebrows_fullness={ "layer_2_low_thickness" 157 "layer_2_avg_thickness" 149 } + gene_body_hair={ "body_hair_avg" 111 "body_hair_avg" 111 } + gene_hair_type={ "hair_wavy" 144 "hair_wavy" 144 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes" 108 "normal_eyes" 108 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 206 "normal_eyelashes" 206 } + beards={ "all_beards" 15 "no_beard" 0 } + hairstyles={ "all_hairstyles" 22 "all_hairstyles" 0 } + legwear={ "mena_common_legwear" 123 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "mpo_mongol_commoner_clothes" 122 "most_clothes" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + gene_balding_hair_effect={ "shaved_baldness" 255 "no_baldness" 0 } + } + entity={ 1955045592 1955045592 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + { + hash=1563190100 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_sandra_runge_moller.txt b/common/bookmark_portraits/historical_export_easteregg_sandra_runge_moller.txt deleted file mode 100644 index fab08adc..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_sandra_runge_moller.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_sandra_runge_moller -historical_export_easteregg_sandra_runge_moller={ - type=female - id=18501 - age=0.280000 - genes={ hair_color={ 8 9 209 178 } - skin_color={ 53 48 67 91 } - eye_color={ 119 114 145 138 } - gene_chin_forward={ "chin_forward_neg" 120 "chin_forward_neg" 120 } - gene_chin_height={ "chin_height_neg" 135 "chin_height_neg" 126 } - gene_chin_width={ "chin_width_pos" 180 "chin_width_pos" 139 } - gene_eye_angle={ "eye_angle_pos" 151 "eye_angle_pos" 138 } - gene_eye_depth={ "eye_depth_neg" 132 "eye_depth_neg" 118 } - gene_eye_height={ "eye_height_neg" 123 "eye_height_neg" 114 } - gene_eye_distance={ "eye_distance_pos" 111 "eye_distance_pos" 140 } - gene_eye_shut={ "eye_shut_pos" 147 "eye_shut_pos" 131 } - gene_forehead_angle={ "forehead_angle_pos" 180 "forehead_angle_pos" 132 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 147 "forehead_brow_height_pos" 141 } - gene_forehead_roundness={ "forehead_roundness_pos" 139 "forehead_roundness_pos" 135 } - gene_forehead_width={ "forehead_width_neg" 153 "forehead_width_neg" 120 } - gene_forehead_height={ "forehead_height_pos" 172 "forehead_height_pos" 135 } - gene_head_height={ "head_height_neg" 167 "head_height_neg" 101 } - gene_head_width={ "head_width_pos" 203 "head_width_pos" 203 } - gene_head_profile={ "head_profile_pos" 144 "head_profile_pos" 139 } - gene_head_top_height={ "head_top_height_pos" 140 "head_top_height_pos" 140 } - gene_head_top_width={ "head_top_width_pos" 167 "head_top_width_pos" 167 } - gene_jaw_angle={ "jaw_angle_neg" 140 "jaw_angle_neg" 122 } - gene_jaw_forward={ "jaw_forward_pos" 105 "jaw_forward_pos" 136 } - gene_jaw_height={ "jaw_height_neg" 121 "jaw_height_neg" 121 } - gene_jaw_width={ "jaw_width_neg" 132 "jaw_width_neg" 115 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 149 "mouth_corner_depth_neg" 123 } - gene_mouth_corner_height={ "mouth_corner_height_neg" 141 "mouth_corner_height_neg" 119 } - gene_mouth_forward={ "mouth_forward_pos" 148 "mouth_forward_pos" 139 } - gene_mouth_height={ "mouth_height_pos" 137 "mouth_height_pos" 137 } - gene_mouth_width={ "mouth_width_neg" 115 "mouth_width_neg" 82 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 150 "mouth_upper_lip_size_pos" 149 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 109 "mouth_lower_lip_size_neg" 95 } - gene_mouth_open={ "mouth_open_neg" 67 "mouth_open_neg" 18 } - gene_neck_length={ "neck_length_pos" 104 "neck_length_pos" 129 } - gene_neck_width={ "neck_width_neg" 169 "neck_width_neg" 103 } - gene_bs_cheek_forward={ "cheek_forward_pos" 217 "cheek_forward_pos" 3 } - gene_bs_cheek_height={ "cheek_height_pos" 97 "cheek_height_neg" 37 } - gene_bs_cheek_width={ "cheek_width_pos" 123 "cheek_width_pos" 26 } - gene_bs_ear_angle={ "ear_angle_pos" 105 "ear_angle_neg" 19 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 30 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 8 } - gene_bs_ear_outward={ "ear_outward_neg" 61 "ear_outward_pos" 32 } - gene_bs_ear_size={ "ear_size_pos" 33 "ear_size_pos" 33 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 11 "eye_corner_depth_pos" 197 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 115 "eye_fold_shape_neg" 133 } - gene_bs_eye_size={ "eye_size_neg" 1 "eye_size_neg" 6 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 91 "eye_upper_lid_size_pos" 38 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 109 "forehead_brow_curve_neg" 20 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 197 "forehead_brow_forward_pos" 118 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_neg" 27 "forehead_brow_inner_height_neg" 61 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 27 "forehead_brow_outer_height_neg" 106 } - gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 55 "forehead_brow_width_neg" 179 } - gene_bs_jaw_def={ "jaw_def_neg" 35 "jaw_def_pos" 102 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 111 "mouth_lower_lip_def_pos" 29 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 11 "mouth_lower_lip_full_neg" 34 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 5 "mouth_lower_lip_pad_pos" 36 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 41 "mouth_lower_lip_width_pos" 114 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 146 "mouth_philtrum_def_pos" 105 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 43 "mouth_philtrum_shape_pos" 5 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 17 "mouth_philtrum_width_neg" 34 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 70 "mouth_upper_lip_def_pos" 118 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 51 "mouth_upper_lip_full_pos" 24 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 17 "mouth_upper_lip_profile_pos" 31 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 91 "mouth_upper_lip_width_neg" 21 } - gene_bs_nose_forward={ "nose_forward_neg" 11 "nose_forward_pos" 17 } - gene_bs_nose_height={ "nose_height_neg" 41 "nose_height_pos" 93 } - gene_bs_nose_length={ "nose_length_neg" 37 "nose_length_pos" 88 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 179 "nose_nostril_height_neg" 51 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 59 "nose_nostril_width_neg" 22 } - gene_bs_nose_profile={ "nose_profile_neg" 7 "nose_profile_pos" 33 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 59 "nose_ridge_angle_neg" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 61 "nose_ridge_width_neg" 21 } - gene_bs_nose_size={ "nose_size_pos" 25 "nose_size_pos" 60 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 63 "nose_tip_angle_pos" 91 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 29 "nose_tip_forward_neg" 2 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 97 "nose_tip_width_pos" 16 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 22 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 156 "cheek_fat_01_pos" 196 } - face_detail_chin_cleft={ "chin_dimple" 0 "chin_dimple" 8 } - face_detail_chin_def={ "chin_def" 177 "chin_def_neg" 10 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 255 "eye_lower_lid_def" 203 } - face_detail_eye_socket={ "eye_socket_01" 75 "eye_socket_01" 48 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_03" 8 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 0 "nose_ridge_def_pos" 192 } - face_detail_nose_tip_def={ "nose_tip_def" 120 "nose_tip_def" 62 } - face_detail_temple_def={ "temple_def" 28 "temple_def" 117 } - expression_brow_wrinkles={ "brow_wrinkles_02" 0 "brow_wrinkles_02" 89 } - expression_eye_wrinkles={ "eye_wrinkles_01" 68 "eye_wrinkles_01" 212 } - expression_forehead_wrinkles={ "forehead_wrinkles_02" 207 "forehead_wrinkles_02" 207 } - expression_other={ "cheek_wrinkles_both_01" 51 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_2" 170 "complexion_1" 126 } - gene_height={ "normal_height" 161 "normal_height" 145 } - gene_bs_body_type={ "body_fat_head_fat_medium" 126 "body_fat_head_fat_medium" 126 } - gene_bs_body_shape={ "body_shape_triangle_half" 122 "body_shape_triangle_half" 0 } - gene_bs_bust={ "bust_clothes" 57 "bust_shape_4_full" 89 } - gene_age={ "old_2" 122 "old_2" 122 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 212 "far_spacing_low_thickness" 212 } - gene_eyebrows_fullness={ "layer_2_lower_thickness" 96 "layer_2_avg_thickness" 148 } - gene_body_hair={ "body_hair_sparse" 115 "body_hair_sparse" 115 } - gene_hair_type={ "hair_straight" 174 "hair_straight" 174 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 219 "normal_eyes" 219 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 116 "normal_eyelashes" 157 } - pose={ "" 255 "" 0 } - clothes={ "northern_commoner_clothes" 124 "most_clothes" 0 } - headgear={ "no_headgear" 233 "no_headgear" 0 } - legwear={ "western_common_legwear" 155 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 137 "all_hairstyles" 0 } - } - entity={ 807438772 807438772 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_sean_hughes.txt b/common/bookmark_portraits/historical_export_easteregg_sean_hughes.txt deleted file mode 100644 index 8e51bcf3..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_sean_hughes.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_sean_hughes -historical_export_easteregg_sean_hughes={ - type=male - id=16828 - age=0.280000 - genes={ hair_color={ 103 212 82 240 } - skin_color={ 127 43 76 90 } - eye_color={ 196 139 196 139 } - gene_chin_forward={ "chin_forward_pos" 104 "chin_forward_pos" 104 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 127 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 91 "eye_angle_pos" 91 } - gene_eye_depth={ "eye_depth_pos" 165 "eye_depth_pos" 165 } - gene_eye_height={ "eye_height_pos" 89 "eye_height_pos" 89 } - gene_eye_distance={ "eye_distance_pos" 141 "eye_distance_pos" 141 } - gene_eye_shut={ "eye_shut_neg" 165 "eye_shut_pos" 165 } - gene_forehead_angle={ "forehead_angle_pos" 165 "forehead_angle_pos" 165 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 165 "forehead_brow_height_pos" 165 } - gene_forehead_roundness={ "forehead_roundness_pos" 119 "forehead_roundness_pos" 119 } - gene_forehead_width={ "forehead_width_pos" 93 "forehead_width_pos" 93 } - gene_forehead_height={ "forehead_height_pos" 165 "forehead_height_pos" 165 } - gene_head_height={ "head_height_pos" 127 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 89 "head_width_pos" 89 } - gene_head_profile={ "head_profile_pos" 127 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 110 "jaw_angle_pos" 110 } - gene_jaw_forward={ "jaw_forward_pos" 130 "jaw_forward_pos" 130 } - gene_jaw_height={ "jaw_height_pos" 114 "jaw_height_pos" 114 } - gene_jaw_width={ "jaw_width_pos" 130 "jaw_width_pos" 130 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 138 "mouth_corner_depth_pos" 138 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 108 "mouth_forward_pos" 108 } - gene_mouth_height={ "mouth_height_pos" 136 "mouth_height_pos" 136 } - gene_mouth_width={ "mouth_width_pos" 137 "mouth_width_pos" 137 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 161 "mouth_upper_lip_size_pos" 161 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 154 "mouth_lower_lip_size_pos" 154 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 141 "neck_length_pos" 141 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 0 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_neg" 110 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 65 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 0 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 52 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 21 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 11 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 89 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 39 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 15 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_neg" 81 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 8 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 85 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 63 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 17 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 15 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 126 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_neg" 26 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 38 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 0 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 19 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 62 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 58 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_beauty_1" 255 "complexion_1" 0 } - gene_height={ "normal_height" 179 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_low" 114 "body_fat_head_fat_medium" 114 } - gene_bs_body_shape={ "body_shape_average_clothed" 61 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 218 "bust_clothes" 218 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_high_thickness" 255 "avg_spacing_avg_thickness" 212 } - gene_eyebrows_fullness={ "layer_2_high_thickness" 24 "layer_2_avg_thickness" 115 } - gene_body_hair={ "body_hair_sparse" 0 "body_hair_sparse" 0 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 255 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - beards={ "scripted_character_beards_01" 28 "no_beard" 0 } - hairstyles={ "scripted_character_hairstyles_01" 68 "all_hairstyles" 0 } - clothes={ "dde_hre_war_nobility_clothes" 139 "most_clothes" 0 } - headgear={ "no_headgear" 178 "no_headgear" 0 } - legwear={ "western_war_legwear" 0 "all_legwear" 0 } - } - entity={ 2697330347 2697330347 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_steacy_mcilwham.txt b/common/bookmark_portraits/historical_export_easteregg_steacy_mcilwham.txt deleted file mode 100644 index 45931a02..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_steacy_mcilwham.txt +++ /dev/null @@ -1,119 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_steacy_mcilwham -historical_export_easteregg_steacy_mcilwham={ - type=female - id=17413 - age=0.250000 - genes={ hair_color={ 45 0 125 254 } - skin_color={ 13 6 102 69 } - eye_color={ 238 65 42 161 } - gene_chin_forward={ "chin_forward_pos" 92 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 132 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 171 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 134 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 122 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 140 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 149 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 136 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 100 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 197 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 115 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 138 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 116 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 169 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 43 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 0 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 166 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 105 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 114 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 134 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 107 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 117 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 145 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 98 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 136 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 83 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 84 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 151 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 111 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 56 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 21 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_neg" 5 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_neg" 1 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_neg" 43 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_upper_bend_pos" 43 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 15 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_neg" 53 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 175 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 111 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_neg" 87 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 23 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 17 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 75 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 39 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 21 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 35 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 33 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 92 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 73 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 21 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 43 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 0 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 105 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 19 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 63 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 27 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 31 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 61 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 133 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_neg" 71 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_neg" 49 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 113 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 39 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 47 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 105 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 75 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_neg" 77 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 125 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 45 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 7 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_04_pos" 87 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 40 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 0 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 255 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 255 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 75 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 194 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 123 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_5" 255 "complexion_1" 0 } - gene_height={ "normal_height" 104 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 121 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 255 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 141 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "far_spacing_low_thickness" 218 "avg_spacing_avg_thickness" 217 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 69 "layer_2_avg_thickness" 90 } - gene_body_hair={ "body_hair_sparse" 109 "body_hair_sparse" 112 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 186 "all_hairstyles" 0 } - clothes={ "western_commoner_clothes" 142 "most_clothes" 0 } - headgear={ "no_headgear" 251 "no_headgear" 0 } - legwear={ "western_common_legwear" 142 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_stina_arvidsson_radestig.txt b/common/bookmark_portraits/historical_export_easteregg_stina_arvidsson_radestig.txt deleted file mode 100644 index 5915bcdb..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_stina_arvidsson_radestig.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_stina_arvidsson_radestig -historical_export_easteregg_stina_arvidsson_radestig={ - type=female - id=19213 - age=0.260000 - genes={ hair_color={ 19 126 113 67 } - skin_color={ 72 28 127 86 } - eye_color={ 253 174 250 201 } - gene_chin_forward={ "chin_forward_pos" 146 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 105 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 127 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 127 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 135 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 127 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 207 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 127 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 127 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 127 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 127 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 127 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 127 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 127 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 127 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 161 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 117 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 53 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 81 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_neg" 101 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 100 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 104 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 127 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 127 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 0 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 0 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 0 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 0 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 63 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 0 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 7 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 2 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 246 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 118 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 62 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 0 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 0 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 10 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 22 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 114 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 116 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 183 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_neg" 99 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 79 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 0 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 8 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_neg" 160 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 24 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 114 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 47 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 119 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 14 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 30 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_01" 0 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 29 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 163 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_03" 109 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_03" 81 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_neg" 255 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_04" 168 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 0 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_left_01" 127 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_beauty_1" 3 "complexion_1" 0 } - gene_height={ "normal_height" 141 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 127 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average" 122 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 101 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 228 "avg_spacing_avg_thickness" 229 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 24 "layer_2_avg_thickness" 91 } - gene_body_hair={ "body_hair_sparse" 179 "body_hair_sparse" 179 } - gene_hair_type={ "hair_wavy" 140 "hair_straight" 140 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 0 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - clothes={ "western_low_nobility_clothes" 54 "most_clothes" 0 } - headgear={ "northern_common" 164 "no_headgear" 0 } - legwear={ "western_common_legwear" 237 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_03" 153 "all_hairstyles" 0 } - } - entity={ 616600735 616600735 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_tegan_harris.txt b/common/bookmark_portraits/historical_export_easteregg_tegan_harris.txt deleted file mode 100644 index 91c7e982..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_tegan_harris.txt +++ /dev/null @@ -1,119 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_tegan_harris -historical_export_easteregg_tegan_harris={ - type=female - id=16507 - age=0.320000 - genes={ hair_color={ 220 239 208 187 } - skin_color={ 66 39 105 94 } - eye_color={ 136 242 129 168 } - gene_chin_forward={ "chin_forward_pos" 127 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 127 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 107 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 127 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 75 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 127 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 127 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 140 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 127 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 128 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 207 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 127 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 154 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 150 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 84 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 105 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 127 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 127 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 127 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 127 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 119 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 96 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 75 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 127 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 127 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 127 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 127 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 68 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 108 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 146 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 127 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 127 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 67 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 123 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 0 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_pos" 0 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 82 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 107 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_neg" 16 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 63 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 201 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 101 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 113 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 2 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 1 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_pos" 42 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 44 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 0 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 86 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 113 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 0 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 0 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 53 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_pos" 17 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 12 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 0 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 101 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_pos" 0 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 0 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 0 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 0 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 44 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 0 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 0 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_02" 1 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_01_pos" 132 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_cleft" 0 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 0 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 73 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_01" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 0 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_01" 0 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 167 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 0 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_both_01" 113 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_3" 136 "complexion_1" 0 } - gene_height={ "normal_height" 126 "normal_height" 127 } - gene_bs_body_type={ "body_fat_head_fat_medium" 148 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average_clothed" 170 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 170 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 189 "avg_spacing_avg_thickness" 196 } - gene_eyebrows_fullness={ "layer_2_avg_thickness" 140 "layer_2_avg_thickness" 125 } - gene_body_hair={ "body_hair_sparse" 173 "body_hair_sparse" 173 } - gene_hair_type={ "hair_straight" 0 "hair_straight" 0 } - gene_baldness={ "no_baldness" 0 "no_baldness" 0 } - eye_accessory={ "normal_eyes" 2 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 67 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 186 "all_hairstyles" 0 } - clothes={ "western_commoner_clothes" 58 "most_clothes" 0 } - headgear={ "western_common" 244 "no_headgear" 0 } - legwear={ "western_common_legwear" 58 "all_legwear" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_tess_lindholm.txt b/common/bookmark_portraits/historical_export_easteregg_tess_lindholm.txt deleted file mode 100644 index 8ffe1a96..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_tess_lindholm.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_tess_lindholm -historical_export_easteregg_tess_lindholm={ - type=female - id=18439 - age=0.300000 - genes={ hair_color={ 3 11 50 245 } - skin_color={ 10 76 18 79 } - eye_color={ 136 214 53 190 } - gene_chin_forward={ "chin_forward_pos" 123 "chin_forward_pos" 127 } - gene_chin_height={ "chin_height_pos" 107 "chin_height_pos" 127 } - gene_chin_width={ "chin_width_pos" 137 "chin_width_pos" 127 } - gene_eye_angle={ "eye_angle_pos" 123 "eye_angle_pos" 127 } - gene_eye_depth={ "eye_depth_pos" 130 "eye_depth_pos" 127 } - gene_eye_height={ "eye_height_pos" 12 "eye_height_pos" 127 } - gene_eye_distance={ "eye_distance_pos" 124 "eye_distance_pos" 127 } - gene_eye_shut={ "eye_shut_pos" 127 "eye_shut_pos" 127 } - gene_forehead_angle={ "forehead_angle_pos" 180 "forehead_angle_pos" 127 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 127 "forehead_brow_height_pos" 127 } - gene_forehead_roundness={ "forehead_roundness_pos" 127 "forehead_roundness_pos" 127 } - gene_forehead_width={ "forehead_width_pos" 127 "forehead_width_pos" 127 } - gene_forehead_height={ "forehead_height_pos" 101 "forehead_height_pos" 127 } - gene_head_height={ "head_height_pos" 206 "head_height_pos" 127 } - gene_head_width={ "head_width_pos" 142 "head_width_pos" 127 } - gene_head_profile={ "head_profile_pos" 127 "head_profile_pos" 127 } - gene_head_top_height={ "head_top_height_pos" 63 "head_top_height_pos" 127 } - gene_head_top_width={ "head_top_width_pos" 142 "head_top_width_pos" 127 } - gene_jaw_angle={ "jaw_angle_pos" 150 "jaw_angle_pos" 127 } - gene_jaw_forward={ "jaw_forward_pos" 89 "jaw_forward_pos" 127 } - gene_jaw_height={ "jaw_height_pos" 53 "jaw_height_pos" 127 } - gene_jaw_width={ "jaw_width_pos" 147 "jaw_width_pos" 127 } - gene_mouth_corner_depth={ "mouth_corner_depth_pos" 127 "mouth_corner_depth_pos" 127 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 169 "mouth_corner_height_pos" 127 } - gene_mouth_forward={ "mouth_forward_pos" 76 "mouth_forward_pos" 127 } - gene_mouth_height={ "mouth_height_pos" 84 "mouth_height_pos" 127 } - gene_mouth_width={ "mouth_width_pos" 136 "mouth_width_pos" 127 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 80 "mouth_upper_lip_size_pos" 127 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 147 "mouth_lower_lip_size_pos" 127 } - gene_mouth_open={ "mouth_open_pos" 0 "mouth_open_pos" 127 } - gene_neck_length={ "neck_length_pos" 127 "neck_length_pos" 127 } - gene_neck_width={ "neck_width_pos" 54 "neck_width_pos" 127 } - gene_bs_cheek_forward={ "cheek_forward_pos" 0 "cheek_forward_pos" 0 } - gene_bs_cheek_height={ "cheek_height_pos" 255 "cheek_height_pos" 0 } - gene_bs_cheek_width={ "cheek_width_pos" 15 "cheek_width_pos" 0 } - gene_bs_ear_angle={ "ear_angle_pos" 0 "ear_angle_pos" 0 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 0 "ear_inner_shape_pos" 0 } - gene_bs_ear_bend={ "ear_both_bend_pos" 0 "ear_both_bend_pos" 0 } - gene_bs_ear_outward={ "ear_outward_pos" 0 "ear_outward_pos" 0 } - gene_bs_ear_size={ "ear_size_neg" 210 "ear_size_pos" 0 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 16 "eye_corner_depth_pos" 0 } - gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 0 "eye_fold_shape_pos" 0 } - gene_bs_eye_size={ "eye_size_pos" 156 "eye_size_pos" 0 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 0 "eye_upper_lid_size_pos" 0 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 0 "forehead_brow_curve_pos" 0 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_pos" 0 "forehead_brow_forward_pos" 0 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 117 "forehead_brow_inner_height_pos" 0 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 155 "forehead_brow_outer_height_pos" 0 } - gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 61 "forehead_brow_width_pos" 0 } - gene_bs_jaw_def={ "jaw_def_neg" 56 "jaw_def_pos" 0 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 0 "mouth_lower_lip_def_pos" 0 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 0 "mouth_lower_lip_full_pos" 0 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 31 "mouth_lower_lip_pad_pos" 0 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_pos" 0 "mouth_lower_lip_width_pos" 0 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 41 "mouth_philtrum_def_pos" 0 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 0 "mouth_philtrum_shape_pos" 0 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 0 "mouth_philtrum_width_pos" 0 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 152 "mouth_upper_lip_def_pos" 0 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 0 "mouth_upper_lip_full_pos" 0 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 133 "mouth_upper_lip_profile_pos" 0 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 0 "mouth_upper_lip_width_pos" 0 } - gene_bs_nose_forward={ "nose_forward_pos" 0 "nose_forward_pos" 0 } - gene_bs_nose_height={ "nose_height_neg" 79 "nose_height_pos" 0 } - gene_bs_nose_length={ "nose_length_pos" 94 "nose_length_pos" 0 } - gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 127 "nose_nostril_height_pos" 0 } - gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 61 "nose_nostril_width_pos" 0 } - gene_bs_nose_profile={ "nose_profile_neg" 135 "nose_profile_pos" 0 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 140 "nose_ridge_angle_pos" 0 } - gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 158 "nose_ridge_width_pos" 0 } - gene_bs_nose_size={ "nose_size_pos" 85 "nose_size_pos" 0 } - gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 77 "nose_tip_angle_pos" 0 } - gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 123 "nose_tip_forward_pos" 0 } - gene_bs_nose_tip_width={ "nose_tip_width_pos" 29 "nose_tip_width_pos" 0 } - face_detail_cheek_def={ "cheek_def_02" 148 "cheek_def_01" 0 } - face_detail_cheek_fat={ "cheek_fat_03_pos" 98 "cheek_fat_01_pos" 0 } - face_detail_chin_cleft={ "chin_dimple" 152 "chin_cleft" 0 } - face_detail_chin_def={ "chin_def" 69 "chin_def" 0 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 0 "eye_lower_lid_def" 0 } - face_detail_eye_socket={ "eye_socket_01" 75 "eye_socket_01" 0 } - face_detail_nasolabial={ "nasolabial_03" 0 "nasolabial_01" 0 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 0 "nose_ridge_def_pos" 0 } - face_detail_nose_tip_def={ "nose_tip_def" 0 "nose_tip_def" 0 } - face_detail_temple_def={ "temple_def" 45 "temple_def" 0 } - expression_brow_wrinkles={ "brow_wrinkles_03" 104 "brow_wrinkles_01" 0 } - expression_eye_wrinkles={ "eye_wrinkles_01" 183 "eye_wrinkles_01" 0 } - expression_forehead_wrinkles={ "forehead_wrinkles_01" 154 "forehead_wrinkles_01" 0 } - expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_left_01" 127 } - complexion={ "complexion_2" 132 "complexion_1" 0 } - gene_height={ "normal_height" 113 "normal_height" 127 } - gene_bs_body_type={ "body_average" 171 "body_fat_head_fat_medium" 127 } - gene_bs_body_shape={ "body_shape_average" 183 "body_shape_average" 0 } - gene_bs_bust={ "bust_clothes" 91 "bust_clothes" 127 } - gene_age={ "old_1" 0 "old_1" 0 } - gene_eyebrows_shape={ "avg_spacing_avg_thickness" 192 "avg_spacing_avg_thickness" 155 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 109 "layer_2_avg_thickness" 86 } - gene_body_hair={ "body_hair_sparse" 30 "body_hair_sparse" 116 } - gene_hair_type={ "hair_wavy" 136 "hair_curly" 136 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 0 "normal_eyes" 0 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 255 "normal_eyelashes" 0 } - pose={ "" 255 "" 0 } - clothes={ "northern_commoner_clothes" 142 "most_clothes" 0 } - headgear={ "no_headgear" 203 "no_headgear" 0 } - legwear={ "western_common_legwear" 201 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 33 "all_hairstyles" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/bookmark_portraits/historical_export_easteregg_veronica_pazos.txt b/common/bookmark_portraits/historical_export_easteregg_veronica_pazos.txt new file mode 100644 index 00000000..af495079 --- /dev/null +++ b/common/bookmark_portraits/historical_export_easteregg_veronica_pazos.txt @@ -0,0 +1,139 @@ +# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for +# History database id:easteregg_veronica_pazos +historical_export_easteregg_veronica_pazos={ + type=female + id=19696 + random_seed=2700482853 + age=0.270000 + genes={ hair_color={ 135 110 186 153 } + skin_color={ 50 7 50 87 } + eye_color={ 125 211 89 152 } + gene_chin_forward={ "chin_forward_pos" 153 "chin_forward_pos" 176 } + gene_chin_height={ "chin_height_neg" 89 "chin_height_neg" 124 } + gene_chin_width={ "chin_width_neg" 134 "chin_width_neg" 118 } + gene_eye_angle={ "eye_angle_pos" 132 "eye_angle_pos" 132 } + gene_eye_depth={ "eye_depth_pos" 139 "eye_depth_pos" 139 } + gene_eye_height={ "eye_height_pos" 164 "eye_height_pos" 164 } + gene_eye_distance={ "eye_distance_pos" 132 "eye_distance_pos" 132 } + gene_eye_shut={ "eye_shut_neg" 122 "eye_shut_neg" 122 } + gene_forehead_angle={ "forehead_angle_neg" 104 "forehead_angle_neg" 104 } + gene_forehead_brow_height={ "forehead_brow_height_neg" 123 "forehead_brow_height_neg" 123 } + gene_forehead_roundness={ "forehead_roundness_neg" 127 "forehead_roundness_neg" 127 } + gene_forehead_width={ "forehead_width_neg" 108 "forehead_width_neg" 108 } + gene_forehead_height={ "forehead_height_neg" 99 "forehead_height_neg" 99 } + gene_head_height={ "head_height_neg" 113 "head_height_neg" 113 } + gene_head_width={ "head_width_neg" 102 "head_width_neg" 102 } + gene_head_profile={ "head_profile_pos" 168 "head_profile_pos" 168 } + gene_head_top_height={ "head_top_height_neg" 124 "head_top_height_neg" 124 } + gene_head_top_width={ "head_top_width_pos" 129 "head_top_width_pos" 129 } + gene_jaw_angle={ "jaw_angle_neg" 111 "jaw_angle_neg" 111 } + gene_jaw_forward={ "jaw_forward_neg" 118 "jaw_forward_neg" 118 } + gene_jaw_height={ "jaw_height_neg" 127 "jaw_height_neg" 127 } + gene_jaw_width={ "jaw_width_pos" 136 "jaw_width_pos" 166 } + gene_mouth_corner_depth={ "mouth_corner_depth_neg" 119 "mouth_corner_depth_neg" 119 } + gene_mouth_corner_height={ "mouth_corner_height_pos" 128 "mouth_corner_height_pos" 128 } + gene_mouth_forward={ "mouth_forward_neg" 111 "mouth_forward_neg" 111 } + gene_mouth_height={ "mouth_height_neg" 127 "mouth_height_neg" 127 } + gene_mouth_width={ "mouth_width_neg" 107 "mouth_width_neg" 107 } + gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 118 "mouth_upper_lip_size_neg" 118 } + gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 77 "mouth_lower_lip_size_neg" 77 } + gene_mouth_open={ "mouth_open_neg" 24 "mouth_open_neg" 24 } + gene_neck_length={ "neck_length_neg" 116 "neck_length_neg" 116 } + gene_neck_width={ "neck_width_pos" 101 "neck_width_pos" 134 } + gene_bs_cheek_forward={ "cheek_forward_pos" 24 "cheek_forward_pos" 24 } + gene_bs_cheek_height={ "cheek_height_pos" 20 "cheek_height_pos" 20 } + gene_bs_cheek_width={ "cheek_width_neg" 36 "cheek_width_neg" 36 } + gene_bs_ear_angle={ "ear_angle_neg" 43 "ear_angle_neg" 43 } + gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 203 "ear_inner_shape_pos" 203 } + gene_bs_ear_bend={ "ear_both_bend_pos" 13 "ear_both_bend_pos" 13 } + gene_bs_ear_outward={ "ear_outward_neg" 15 "ear_outward_neg" 15 } + gene_bs_ear_size={ "ear_size_neg" 121 "ear_size_neg" 121 } + gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 164 "eye_corner_depth_pos" 164 } + gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 138 "eye_fold_shape_neg" 138 } + gene_bs_eye_size={ "eye_size_neg" 127 "eye_size_neg" 35 } + gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 74 "eye_upper_lid_size_pos" 74 } + gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 112 "forehead_brow_curve_neg" 112 } + gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 44 "forehead_brow_forward_neg" 44 } + gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 50 "forehead_brow_inner_height_pos" 50 } + gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 57 "forehead_brow_outer_height_pos" 57 } + gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 13 "forehead_brow_width_pos" 13 } + gene_bs_jaw_def={ "jaw_def_pos" 25 "jaw_def_pos" 25 } + gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 104 "mouth_lower_lip_def_pos" 104 } + gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 5 "mouth_lower_lip_full_neg" 121 } + gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_pos" 101 "mouth_lower_lip_pad_pos" 101 } + gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 5 "mouth_lower_lip_width_pos" 74 } + gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 28 "mouth_philtrum_def_pos" 28 } + gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_neg" 9 "mouth_philtrum_shape_neg" 9 } + gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_pos" 43 "mouth_philtrum_width_pos" 43 } + gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 151 "mouth_upper_lip_def_pos" 151 } + gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 3 "mouth_upper_lip_full_pos" 15 } + gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 107 "mouth_upper_lip_profile_pos" 107 } + gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 9 "mouth_upper_lip_width_pos" 50 } + gene_bs_nose_forward={ "nose_forward_pos" 32 "nose_forward_pos" 32 } + gene_bs_nose_height={ "nose_height_neg" 125 "nose_height_pos" 144 } + gene_bs_nose_length={ "nose_length_pos" 39 "nose_length_pos" 2 } + gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 37 "nose_nostril_height_neg" 37 } + gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 61 "nose_nostril_width_pos" 14 } + gene_bs_nose_profile={ "nose_profile_hawk" 21 "nose_profile_hawk" 21 } + gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 28 "nose_ridge_angle_neg" 28 } + gene_bs_nose_ridge_width={ "nose_ridge_width_pos" 120 "nose_ridge_width_pos" 120 } + gene_bs_nose_size={ "nose_size_pos" 97 "nose_size_pos" 61 } + gene_bs_nose_tip_angle={ "nose_tip_angle_neg" 29 "nose_tip_angle_neg" 29 } + gene_bs_nose_tip_forward={ "nose_tip_forward_neg" 17 "nose_tip_forward_neg" 17 } + gene_bs_nose_tip_width={ "nose_tip_width_neg" 50 "nose_tip_width_neg" 50 } + face_detail_cheek_def={ "cheek_def_01" 5 "cheek_def_01" 5 } + face_detail_cheek_fat={ "cheek_fat_02_pos" 14 "cheek_fat_02_pos" 14 } + face_detail_chin_cleft={ "chin_cleft" 3 "chin_cleft" 3 } + face_detail_chin_def={ "chin_def" 21 "chin_def" 21 } + face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 4 "eye_lower_lid_def" 4 } + face_detail_eye_socket={ "eye_socket_02" 25 "eye_socket_02" 25 } + face_detail_nasolabial={ "nasolabial_01" 20 "nasolabial_01" 20 } + face_detail_nose_ridge_def={ "nose_ridge_def_neg" 8 "nose_ridge_def_neg" 8 } + face_detail_nose_tip_def={ "nose_tip_def" 38 "nose_tip_def" 38 } + face_detail_temple_def={ "temple_def" 138 "temple_def" 138 } + expression_brow_wrinkles={ "brow_wrinkles_03" 36 "brow_wrinkles_03" 36 } + expression_eye_wrinkles={ "eye_wrinkles_01" 54 "eye_wrinkles_01" 54 } + expression_forehead_wrinkles={ "forehead_wrinkles_01" 255 "forehead_wrinkles_01" 210 } + expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } + complexion={ "complexion_5" 182 "complexion_2" 182 } + gene_height={ "normal_height" 92 "normal_height" 115 } + gene_bs_body_type={ "body_fat_head_fat_low" 115 "body_fat_head_fat_low" 145 } + gene_bs_body_shape={ "body_shape_average_clothed" 56 "body_shape_apple_half" 0 } + gene_bs_bust={ "bust_clothes" 204 "bust_shape_3_half" 195 } + gene_age={ "old_4" 215 "old_4" 215 } + gene_eyebrows_shape={ "far_spacing_low_thickness" 182 "far_spacing_low_thickness" 182 } + gene_eyebrows_fullness={ "layer_2_lower_thickness" 167 "layer_2_lower_thickness" 167 } + gene_body_hair={ "body_hair_avg" 145 "body_hair_avg" 145 } + gene_hair_type={ "hair_wavy" 98 "hair_wavy" 98 } + gene_baldness={ "no_baldness" 127 "no_baldness" 127 } + eye_accessory={ "normal_eyes_no_shadow" 255 "normal_eyes" 157 } + teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } + eyelashes_accessory={ "normal_eyelashes" 156 "normal_eyelashes" 156 } + beards={ "ep2_beards" 11 "no_beard" 0 } + cloaks={ "no_cloak" 117 "no_cloak" 0 } + hairstyles={ "scripted_character_hairstyles_01" 10 "all_hairstyles" 0 } + legwear={ "western_common_legwear" 160 "all_legwear" 0 } + gene_shrink_body={ "shrink_all" 255 "" 0 } + gene_bs_additive_headgears={ "additive_headgears" 255 "" 0 } + gene_bs_cloak_offset={ "cloak_offset" 255 "" 0 } + gene_bs_long_beard={ "long_beard" 255 "" 0 } + clothes={ "fp2_christian_low_nobility_clothes" 64 "most_clothes" 0 } + headgear={ "no_headgear" 0 "no_headgear" 0 } + gene_balding_hair_effect={ "no_baldness" 255 "no_baldness" 0 } + } + entity={ 2616704408 2616704408 } + tags={ { + hash=2125534279 + invert=no + } + { + hash=2670398845 + invert=no + } + { + hash=681013727 + invert=no + } + } +} + diff --git a/common/bookmark_portraits/historical_export_easteregg_zack_holmgren.txt b/common/bookmark_portraits/historical_export_easteregg_zack_holmgren.txt deleted file mode 100644 index 2822f212..00000000 --- a/common/bookmark_portraits/historical_export_easteregg_zack_holmgren.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Auto generated file, do not edit manually. Created using console command dump_bookmark_portrait_for -# History database id:easteregg_zack_holmgren -historical_export_easteregg_zack_holmgren={ - type=male - id=18433 - age=0.300000 - genes={ hair_color={ 169 249 169 249 } - skin_color={ 87 65 87 65 } - eye_color={ 188 233 66 142 } - gene_chin_forward={ "chin_forward_pos" 133 "chin_forward_pos" 139 } - gene_chin_height={ "chin_height_neg" 80 "chin_height_neg" 104 } - gene_chin_width={ "chin_width_neg" 83 "chin_width_neg" 125 } - gene_eye_angle={ "eye_angle_neg" 95 "eye_angle_neg" 95 } - gene_eye_depth={ "eye_depth_neg" 179 "eye_depth_neg" 124 } - gene_eye_height={ "eye_height_neg" 142 "eye_height_neg" 120 } - gene_eye_distance={ "eye_distance_pos" 106 "eye_distance_pos" 134 } - gene_eye_shut={ "eye_shut_neg" 97 "eye_shut_neg" 109 } - gene_forehead_angle={ "forehead_angle_neg" 158 "forehead_angle_neg" 109 } - gene_forehead_brow_height={ "forehead_brow_height_pos" 146 "forehead_brow_height_pos" 141 } - gene_forehead_roundness={ "forehead_roundness_neg" 95 "forehead_roundness_neg" 114 } - gene_forehead_width={ "forehead_width_neg" 104 "forehead_width_neg" 99 } - gene_forehead_height={ "forehead_height_neg" 144 "forehead_height_neg" 117 } - gene_head_height={ "head_height_neg" 99 "head_height_neg" 113 } - gene_head_width={ "head_width_neg" 52 "head_width_neg" 84 } - gene_head_profile={ "head_profile_neg" 54 "head_profile_neg" 110 } - gene_head_top_height={ "head_top_height_pos" 44 "head_top_height_pos" 129 } - gene_head_top_width={ "head_top_width_pos" 76 "head_top_width_pos" 172 } - gene_jaw_angle={ "jaw_angle_pos" 137 "jaw_angle_pos" 131 } - gene_jaw_forward={ "jaw_forward_neg" 117 "jaw_forward_neg" 121 } - gene_jaw_height={ "jaw_height_pos" 121 "jaw_height_pos" 136 } - gene_jaw_width={ "jaw_width_pos" 107 "jaw_width_pos" 151 } - gene_mouth_corner_depth={ "mouth_corner_depth_neg" 143 "mouth_corner_depth_neg" 123 } - gene_mouth_corner_height={ "mouth_corner_height_pos" 114 "mouth_corner_height_pos" 136 } - gene_mouth_forward={ "mouth_forward_neg" 91 "mouth_forward_neg" 104 } - gene_mouth_height={ "mouth_height_neg" 100 "mouth_height_neg" 116 } - gene_mouth_width={ "mouth_width_pos" 134 "mouth_width_pos" 150 } - gene_mouth_upper_lip_size={ "mouth_upper_lip_size_neg" 119 "mouth_upper_lip_size_neg" 118 } - gene_mouth_lower_lip_size={ "mouth_lower_lip_size_neg" 107 "mouth_lower_lip_size_neg" 107 } - gene_mouth_open={ "mouth_open_pos" 187 "mouth_open_pos" 182 } - gene_neck_length={ "neck_length_neg" 121 "neck_length_neg" 112 } - gene_neck_width={ "neck_width_pos" 15 "neck_width_pos" 148 } - gene_bs_cheek_forward={ "cheek_forward_neg" 139 "cheek_forward_pos" 29 } - gene_bs_cheek_height={ "cheek_height_neg" 41 "cheek_height_neg" 10 } - gene_bs_cheek_width={ "cheek_width_neg" 155 "cheek_width_neg" 31 } - gene_bs_ear_angle={ "ear_angle_pos" 93 "ear_angle_pos" 37 } - gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 96 "ear_inner_shape_pos" 167 } - gene_bs_ear_bend={ "ear_upper_bend_pos" 67 "ear_upper_bend_pos" 67 } - gene_bs_ear_outward={ "ear_outward_neg" 7 "ear_outward_pos" 121 } - gene_bs_ear_size={ "ear_size_neg" 123 "ear_size_neg" 39 } - gene_bs_eye_corner_depth={ "eye_corner_depth_pos" 79 "eye_corner_depth_neg" 192 } - gene_bs_eye_fold_shape={ "eye_fold_shape_neg" 183 "eye_fold_shape_pos" 43 } - gene_bs_eye_size={ "eye_size_neg" 21 "eye_size_neg" 123 } - gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_pos" 95 "eye_upper_lid_size_pos" 76 } - gene_bs_forehead_brow_curve={ "forehead_brow_curve_neg" 177 "forehead_brow_curve_neg" 85 } - gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 33 "forehead_brow_forward_neg" 17 } - gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 93 "forehead_brow_inner_height_pos" 9 } - gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_pos" 117 "forehead_brow_outer_height_pos" 121 } - gene_bs_forehead_brow_width={ "forehead_brow_width_neg" 117 "forehead_brow_width_neg" 44 } - gene_bs_jaw_def={ "jaw_def_pos" 29 "jaw_def_pos" 51 } - gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 103 "mouth_lower_lip_def_pos" 6 } - gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_pos" 111 "mouth_lower_lip_full_pos" 10 } - gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 169 "mouth_lower_lip_pad_neg" 75 } - gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 165 "mouth_lower_lip_width_pos" 34 } - gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 41 "mouth_philtrum_def_pos" 27 } - gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 127 "mouth_philtrum_shape_pos" 25 } - gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 41 "mouth_philtrum_width_pos" 92 } - gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 92 "mouth_upper_lip_def_pos" 114 } - gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_neg" 49 "mouth_upper_lip_full_pos" 28 } - gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_neg" 67 "mouth_upper_lip_profile_neg" 100 } - gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_neg" 155 "mouth_upper_lip_width_neg" 125 } - gene_bs_nose_forward={ "nose_forward_pos" 133 "nose_forward_pos" 9 } - gene_bs_nose_height={ "nose_height_neg" 26 "nose_height_neg" 26 } - gene_bs_nose_length={ "nose_length_neg" 27 "nose_length_neg" 29 } - gene_bs_nose_nostril_height={ "nose_nostril_height_pos" 139 "nose_nostril_height_pos" 2 } - gene_bs_nose_nostril_width={ "nose_nostril_width_pos" 49 "nose_nostril_width_pos" 68 } - gene_bs_nose_profile={ "nose_profile_hawk_pos" 73 "nose_profile_pos" 30 } - gene_bs_nose_ridge_angle={ "nose_ridge_angle_pos" 25 "nose_ridge_angle_pos" 25 } - gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 41 "nose_ridge_width_pos" 39 } - gene_bs_nose_size={ "nose_size_neg" 145 "nose_size_neg" 2 } - gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 13 "nose_tip_angle_neg" 38 } - gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 41 "nose_tip_forward_pos" 10 } - gene_bs_nose_tip_width={ "nose_tip_width_neg" 107 "nose_tip_width_neg" 22 } - face_detail_cheek_def={ "cheek_def_01" 7 "cheek_def_01" 7 } - face_detail_cheek_fat={ "cheek_fat_01_neg" 83 "cheek_fat_01_neg" 25 } - face_detail_chin_cleft={ "chin_cleft" 33 "chin_dimple" 5 } - face_detail_chin_def={ "chin_def" 234 "chin_def" 10 } - face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 172 "eye_lower_lid_def" 46 } - face_detail_eye_socket={ "eye_socket_03" 202 "eye_socket_03" 20 } - face_detail_nasolabial={ "nasolabial_02" 0 "nasolabial_02" 6 } - face_detail_nose_ridge_def={ "nose_ridge_def_pos" 160 "nose_ridge_def_pos" 245 } - face_detail_nose_tip_def={ "nose_tip_def" 223 "nose_tip_def" 223 } - face_detail_temple_def={ "temple_def" 94 "temple_def" 188 } - expression_brow_wrinkles={ "brow_wrinkles_02" 216 "brow_wrinkles_02" 216 } - expression_eye_wrinkles={ "eye_wrinkles_01" 217 "eye_wrinkles_01" 25 } - expression_forehead_wrinkles={ "forehead_wrinkles_03" 238 "forehead_wrinkles_03" 238 } - expression_other={ "cheek_wrinkles_both_01" 0 "cheek_wrinkles_both_01" 0 } - complexion={ "complexion_3" 164 "complexion_3" 98 } - gene_height={ "normal_height" 144 "normal_height" 135 } - gene_bs_body_type={ "body_fat_head_fat_low" 137 "body_fat_head_fat_medium" 115 } - gene_bs_body_shape={ "body_shape_average_clothed" 222 "body_shape_apple_half" 18 } - gene_bs_bust={ "bust_clothes" 80 "bust_shape_2_half" 100 } - gene_age={ "old_3" 97 "old_3" 97 } - gene_eyebrows_shape={ "avg_spacing_low_thickness" 173 "avg_spacing_low_thickness" 130 } - gene_eyebrows_fullness={ "layer_2_low_thickness" 214 "layer_2_avg_thickness" 174 } - gene_body_hair={ "body_hair_avg" 93 "body_hair_avg" 190 } - gene_hair_type={ "hair_wavy" 255 "hair_wavy" 132 } - gene_baldness={ "no_baldness" 127 "no_baldness" 127 } - eye_accessory={ "normal_eyes" 118 "normal_eyes" 118 } - teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 } - eyelashes_accessory={ "normal_eyelashes" 226 "normal_eyelashes" 226 } - pose={ "" 255 "" 0 } - clothes={ "northern_commoner_clothes" 67 "most_clothes" 0 } - headgear={ "no_headgear" 190 "no_headgear" 0 } - legwear={ "western_common_legwear" 200 "all_legwear" 0 } - gene_shrink_body={ "shrink_all" 255 "" 0 } - hairstyles={ "scripted_character_hairstyles_01" 68 "all_hairstyles" 0 } - } - entity={ 979141817 979141817 } -} - diff --git a/common/buildings/00_admin_buildings.txt b/common/buildings/00_admin_buildings.txt new file mode 100644 index 00000000..ba91d4b5 --- /dev/null +++ b/common/buildings/00_admin_buildings.txt @@ -0,0 +1,479 @@ +### Capital Bureau +capital_bureau_01 = { + construction_time = standard_construction_time + + can_construct_potential = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 01 } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder = { + custom_tooltip = { + text = scheme_owner_not_admin + government_has_flag = government_is_administrative + } + is_independent_ruler = yes + capital_province = root + } + } + + cost_gold = normal_building_tier_1_cost + + character_modifier = { + monthly_prestige_gain_per_court_position_mult = 0.01 + domicile_monthly_influence_mult = 0.02 + } + province_modifier = { + monthly_income = 0.15 + } + county_modifier = { + tax_mult = 0.01 + } + + effect_desc = capital_bureau_custom_effect_desc + + next_building = capital_bureau_02 + + type_icon = "icon_capital_bureau.dds" + + ai_value = { + base = 10 + ai_tier_1_building_modifier = yes + ai_tier_1_economical_building_preference_modifier = yes + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + modifier = { + add = 1 + county.development_level >= 10 + } + modifier = { + add = 1 + county.development_level >= 15 + } + modifier = { + add = 1 + county.development_level >= 20 + } + modifier = { + add = 1 + county.development_level >= 25 + } + modifier = { # AI should want to have this in their de jure capital + factor = 1.5 + scope:holder.primary_title = { title_capital_county = root.county } + } + } +} + +capital_bureau_02 = { + construction_time = standard_construction_time + + can_construct_potential = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 01 } + culture = { + has_innovation = innovation_city_planning + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + capital_province = root + } + } + + cost_gold = normal_building_tier_2_cost + + character_modifier = { + monthly_prestige_gain_per_court_position_mult = 0.02 + domicile_monthly_influence_mult = 0.04 + } + province_modifier = { + monthly_income = 0.3 + } + county_modifier = { + tax_mult = 0.02 + } + + effect_desc = capital_bureau_custom_effect_desc + + next_building = capital_bureau_03 + ai_value = { + base = 9 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +capital_bureau_03 = { + construction_time = standard_construction_time + + can_construct_potential = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + capital_province = root + } + } + + cost_gold = normal_building_tier_3_cost + + character_modifier = { + monthly_prestige_gain_per_court_position_mult = 0.03 + domicile_monthly_influence_mult = 0.06 + } + province_modifier = { + monthly_income = 0.45 + } + county_modifier = { + tax_mult = 0.03 + } + + effect_desc = capital_bureau_custom_effect_desc + + next_building = capital_bureau_04 + ai_value = { + base = 8 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +capital_bureau_04 = { + construction_time = standard_construction_time + + can_construct_potential = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 02 } + culture = { + has_innovation = innovation_manorialism + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + capital_province = root + } + } + + cost_gold = normal_building_tier_4_cost + + character_modifier = { + monthly_prestige_gain_per_court_position_mult = 0.04 + domicile_monthly_influence_mult = 0.08 + } + province_modifier = { + monthly_income = 0.6 + } + county_modifier = { + tax_mult = 0.04 + } + + effect_desc = capital_bureau_custom_effect_desc + + next_building = capital_bureau_05 + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +capital_bureau_05 = { + construction_time = standard_construction_time + + can_construct_potential = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + culture = { + has_innovation = innovation_windmills + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + capital_province = root + } + } + + cost_gold = normal_building_tier_5_cost + + character_modifier = { + monthly_prestige_gain_per_court_position_mult = 0.05 + domicile_monthly_influence_mult = 0.1 + stewardship_per_influence_level = 1 + } + province_modifier = { + monthly_income = 0.75 + } + county_modifier = { + tax_mult = 0.05 + } + + effect_desc = capital_bureau_custom_effect_desc + + next_building = capital_bureau_06 + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +capital_bureau_06 = { + construction_time = standard_construction_time + + can_construct_potential = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 03 } + culture = { + has_innovation = innovation_windmills + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + capital_province = root + } + } + + cost_gold = normal_building_tier_6_cost + + character_modifier = { + monthly_prestige_gain_per_court_position_mult = 0.06 + domicile_monthly_influence_mult = 0.12 + stewardship_per_influence_level = 1 + } + province_modifier = { + monthly_income = 0.9 + } + county_modifier = { + tax_mult = 0.06 + } + + effect_desc = capital_bureau_custom_effect_desc + + next_building = capital_bureau_07 + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +capital_bureau_07 = { + construction_time = standard_construction_time + + can_construct_potential = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + capital_province = root + } + } + + cost_gold = normal_building_tier_7_cost + + character_modifier = { + monthly_prestige_gain_per_court_position_mult = 0.07 + domicile_monthly_influence_mult = 0.14 + stewardship_per_influence_level = 1 + } + province_modifier = { + monthly_income = 1.05 + } + county_modifier = { + tax_mult = 0.08 + } + + effect_desc = capital_bureau_custom_effect_desc + + next_building = capital_bureau_08 + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} + +capital_bureau_08 = { + construction_time = standard_construction_time + + can_construct_potential = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + } + } + + can_construct = { + building_requirement_castle_city_church = { LEVEL = 04 } + culture = { + has_innovation = innovation_cranes + } + } + + can_construct_showing_failures_only = { + building_requirement_tribal = no + } + + is_enabled = { + scope:holder = { + government_has_flag = government_is_administrative + is_independent_ruler = yes + capital_province = root + } + } + + cost_gold = normal_building_tier_8_cost + + character_modifier = { + monthly_prestige_gain_per_court_position_mult = 0.08 + domicile_monthly_influence_mult = 0.16 + stewardship_per_influence_level = 1 + } + province_modifier = { + monthly_income = 1.2 + } + county_modifier = { + tax_mult = 0.1 + } + + effect_desc = capital_bureau_custom_effect_desc + + ai_value = { + base = 7 + ai_general_building_modifier = yes + directive_to_build_economy_modifier = yes + ai_economical_building_preference_modifier = yes + modifier = { # Fill all building slots before going for upgrades + factor = 0 + free_building_slots > 0 + } + } +} diff --git a/common/buildings/00_castle_buildings.txt b/common/buildings/00_castle_buildings.txt index b70543fc..8c09faea 100644 --- a/common/buildings/00_castle_buildings.txt +++ b/common/buildings/00_castle_buildings.txt @@ -256,22 +256,68 @@ castle_01 = { } #Steppe fallbacks - #Iranian - asset = { - type = pdxmesh - name = "fp3_building_persian_castle_01_a_01_mesh" - requires_dlc_flag = legacy_of_persia - illustration = @holding_illustration_iranian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 0 } } - graphical_cultures = { steppe_building_gfx } - } - #mena + #For steppe asset = { type = pdxmesh name = "building_mena_castle_01_mesh" illustration = @holding_illustration_mena soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 0 } } graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_siberia } + } + asset = { + type = pdxmesh + name = "building_mena_castle_01_mesh" + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 0 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + } + + #Elsewhere + asset = { + type = pdxmesh + names = { + "building_western_castle_01_mesh" + "building_western_castle_01_b_mesh" + } + illustration = @holding_illustration_western + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/western_castle" soundparameter = { "Tier" = 0 } } + graphical_regions = { graphical_western } + graphical_cultures = { steppe_building_gfx } + } + asset = { + type = pdxmesh + name = "building_indian_castle_01_mesh" + illustration = @holding_illustration_india + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/indian_castle" soundparameter = { "Tier" = 0 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_india } + } + asset = { + type = pdxmesh + name = "building_mena_castle_01_mesh" + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 0 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mena } + } + asset = { + type = pdxmesh + name = "building_mediterranean_castle_01_mesh" + illustration = @holding_illustration_mediterranean + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mediterranean_castle" soundparameter = { "Tier" = 0 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mediterranean } + } + asset = { + type = pdxmesh + name = "ep3_byzantine_castle_01_a_mesh" + requires_dlc_flag = roads_to_power + illustration = @holding_illustration_constantinople + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mediterranean_castle" soundparameter = { "Tier" = 0 } } + graphical_cultures = { steppe_building_gfx } + provinces = { 496 } } can_construct_potential = { @@ -287,6 +333,10 @@ castle_01 = { can_construct_showing_failures_only = { building_requirement_tribal = no building_requirement_tribal_holding_in_county = yes + building_requirement_nomad = no + building_requirement_nomad_holding_in_county = yes + building_requirement_herder = no + building_requirement_herder_holding_in_county = yes } cost_gold = main_building_tier_1_cost @@ -647,22 +697,66 @@ castle_02 = { } #Steppe fallbacks - #Iranian - asset = { - type = pdxmesh - name = "fp3_building_persian_castle_02_a_01_mesh" - requires_dlc_flag = legacy_of_persia - illustration = @holding_illustration_iranian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 1 } } - graphical_cultures = { steppe_building_gfx } - } - #mena + #For steppe asset = { type = pdxmesh name = "building_mena_castle_02_mesh" illustration = @holding_illustration_mena soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 1 } } graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + } + asset = { + type = pdxmesh + name = "building_mena_castle_02_mesh" + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 1 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_siberia } + } + #Elsewhere + ### WESTERN ### + asset = { + type = pdxmesh + name = "building_western_castle_02_mesh" + illustration = @holding_illustration_western + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/western_castle" soundparameter = { "Tier" = 1 } } + graphical_regions = { graphical_western } + graphical_cultures = { steppe_building_gfx } + } + asset = { + type = pdxmesh + name = "building_mena_castle_02_mesh" + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 1 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mena } + } + asset = { + type = pdxmesh + name = "building_indian_castle_02_mesh" + illustration = @holding_illustration_india + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/indian_castle" soundparameter = { "Tier" = 1 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_india } + } + asset = { + type = pdxmesh + name = "building_mediterranean_castle_02_mesh" + illustration = @holding_illustration_mediterranean + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mediterranean_castle" soundparameter = { "Tier" = 1 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mediterranean } + } + ### EP3 Byzantine ### + asset = { + type = pdxmesh + name = "ep3_byzantine_castle_02_a_mesh" + requires_dlc_flag = roads_to_power + illustration = @holding_illustration_constantinople + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mediterranean_castle" soundparameter = { "Tier" = 1 } } + graphical_cultures = { steppe_building_gfx } + provinces = { 496 } } can_construct_potential = { @@ -1018,24 +1112,76 @@ castle_03 = { graphical_cultures = { byzantine_building_gfx } graphical_regions = { graphical_mediterranean } } - - #Steppe fallbacks - #Iranian asset = { type = pdxmesh - name = "fp3_building_persian_castle_03_a_01_mesh" - requires_dlc_flag = legacy_of_persia - illustration = @holding_illustration_iranian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 2 } } - graphical_cultures = { steppe_building_gfx } + name = "ep3_byzantine_castle_03_a_mesh" + requires_dlc_flag = roads_to_power + illustration = @holding_illustration_byzantine + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mediterranean_castle" soundparameter = { "Tier" = 2 } } + graphical_cultures = { byzantine_building_gfx } + graphical_regions = { graphical_mena } } - #mena + + #Steppe fallbacks + #For steppe asset = { type = pdxmesh name = "building_mena_castle_03_mesh" illustration = @holding_illustration_mena soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 2 } } graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + } + asset = { + type = pdxmesh + name = "building_mena_castle_03_mesh" + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_siberia } + } + + #Elsewhere + asset = { + type = pdxmesh + name = "building_western_castle_03_mesh" + illustration = @holding_illustration_western + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/western_castle" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_western } + } + asset = { + type = pdxmesh + name = "building_mena_castle_03_mesh" + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mena } + } + asset = { + type = pdxmesh + name = "building_indian_castle_03_mesh" + illustration = @holding_illustration_india + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/indian_castle" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_india } + } + asset = { + type = pdxmesh + name = "building_mediterranean_castle_03_mesh" + illustration = @holding_illustration_mediterranean + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mediterranean_castle" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mediterranean } + } + asset = { + type = pdxmesh + name = "ep3_byzantine_castle_03_a_mesh" + requires_dlc_flag = roads_to_power + illustration = @holding_illustration_constantinople + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mediterranean_castle" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + provinces = { 496 } } can_construct_potential = { @@ -1384,22 +1530,65 @@ castle_04 = { } #Steppe fallbacks - #Iranian - asset = { - type = pdxmesh - name = "fp3_building_persian_castle_04_a_01_mesh" - requires_dlc_flag = legacy_of_persia - illustration = @holding_illustration_iranian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 3 } } - graphical_cultures = { steppe_building_gfx } - } - #mena + #For steppe asset = { type = pdxmesh name = "building_mena_castle_04_mesh" illustration = @holding_illustration_mena soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 3 } } graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + } + asset = { + type = pdxmesh + name = "building_mena_castle_04_mesh" + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 3 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_siberia } + } + + #Elsewhere + asset = { + type = pdxmesh + name = "building_western_castle_04_mesh" + illustration = @holding_illustration_western + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/western_castle" soundparameter = { "Tier" = 3 } } + graphical_regions = { graphical_western } + graphical_cultures = { steppe_building_gfx } + } + asset = { + type = pdxmesh + name = "building_mena_castle_04_mesh" + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mena_castle" soundparameter = { "Tier" = 3 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mena } + } + asset = { + type = pdxmesh + name = "building_indian_castle_04_mesh" + illustration = @holding_illustration_india + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/indian_castle" soundparameter = { "Tier" = 3 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_india } + } + asset = { + type = pdxmesh + name = "building_mediterranean_castle_04_mesh" + illustration = @holding_illustration_mediterranean + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mediterranean_castle" soundparameter = { "Tier" = 3 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mediterranean } + } + asset = { + type = pdxmesh + name = "ep3_byzantine_castle_04_a_mesh" + requires_dlc_flag = roads_to_power + illustration = @holding_illustration_constantinople + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Castle/mediterranean_castle" soundparameter = { "Tier" = 3 } } + graphical_cultures = { steppe_building_gfx } + provinces = { 496 } } can_construct_potential = { diff --git a/common/buildings/00_city_buildings.txt b/common/buildings/00_city_buildings.txt index 9e40c09a..1b72725d 100644 --- a/common/buildings/00_city_buildings.txt +++ b/common/buildings/00_city_buildings.txt @@ -266,16 +266,7 @@ city_01 = { } #Steppe fallbacks - #Iranian - asset = { - type = pdxmesh - name = "fp3_building_persian_city_01_a_01_mesh" - requires_dlc_flag = legacy_of_persia - illustration = @holding_illustration_iranian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 0 } } - graphical_cultures = { steppe_building_gfx } - } - #mena + #In steppe asset = { type = pdxmesh names = { @@ -284,6 +275,61 @@ city_01 = { illustration = @holding_illustration_mena soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 0 } } graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + } + asset = { + type = pdxmesh + names = { + "building_mena_city_01_mesh" + } + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 0 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_siberia } + } + + #Elsewhere + asset = { + type = pdxmesh + names = { + "western_city_01_a_mesh" + "western_city_01_b_mesh" + "western_city_01_c_mesh" + } + illustration = @holding_illustration_western + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/western_city" soundparameter = { "Tier" = 0 } } + graphical_regions = { graphical_western } + graphical_cultures = { steppe_building_gfx } + } + asset = { + type = pdxmesh + names = { + "building_mena_city_01_mesh" + } + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 0 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mena } + } + asset = { + type = pdxmesh + names = { + "building_india_city_01_mesh" + } + illustration = @holding_illustration_india + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/indian_city" soundparameter = { "Tier" = 0 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_india } + } + asset = { + type = pdxmesh + names = { + "building_mediterranean_city_01_mesh" + } + illustration = @holding_illustration_mediterranean + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mediterranean_city" soundparameter = { "Tier" = 0 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mediterranean } } can_construct_potential = { @@ -299,6 +345,10 @@ city_01 = { can_construct_showing_failures_only = { building_requirement_tribal = no building_requirement_tribal_holding_in_county = yes + building_requirement_nomad = no + building_requirement_nomad_holding_in_county = yes + building_requirement_herder = no + building_requirement_herder_holding_in_county = yes } cost_gold = main_building_tier_1_cost @@ -673,16 +723,7 @@ city_02 = { } #Steppe fallbacks - #Iranian - asset = { - type = pdxmesh - name = "fp3_building_persian_city_01_a_01_mesh" - requires_dlc_flag = legacy_of_persia - illustration = @holding_illustration_iranian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 1 } } - graphical_cultures = { steppe_building_gfx } - } - #mena + #steppe asset = { type = pdxmesh names = { @@ -691,6 +732,61 @@ city_02 = { illustration = @holding_illustration_mena soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 1 } } graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + } + asset = { + type = pdxmesh + names = { + "building_mena_city_01_mesh" + } + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 1 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_siberia } + } + + #elsewhere + asset = { + type = pdxmesh + names = { + "western_city_01_a_mesh" + "western_city_01_b_mesh" + "western_city_01_c_mesh" + } + illustration = @holding_illustration_western + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/western_city" soundparameter = { "Tier" = 1 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_western } + } + asset = { + type = pdxmesh + names = { + "building_mena_city_01_mesh" + } + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 1 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mena } + } + asset = { + type = pdxmesh + names = { + "building_india_city_01_mesh" + } + illustration = @holding_illustration_india + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/indian_city" soundparameter = { "Tier" = 1 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_india } + } + asset = { + type = pdxmesh + names = { + "building_mediterranean_city_01_mesh" + } + illustration = @holding_illustration_mediterranean + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mediterranean_city" soundparameter = { "Tier" = 1 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mediterranean } } can_construct_potential = { @@ -1069,16 +1165,7 @@ city_03 = { } #Steppe fallbacks - #Iranian - asset = { - type = pdxmesh - name = "fp3_building_persian_city_02_a_01_mesh" - requires_dlc_flag = legacy_of_persia - illustration = @holding_illustration_iranian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 2 } } - graphical_cultures = { steppe_building_gfx } - } - #mena + #in steppe asset = { type = pdxmesh names = { @@ -1087,6 +1174,59 @@ city_03 = { illustration = @holding_illustration_mena soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 2 } } graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + } + asset = { + type = pdxmesh + names = { + "building_mena_city_02_mesh" + } + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_siberia } + } + + #Elsewhere + asset = { + type = pdxmesh + names = { + "building_western_city_02_mesh" + } + illustration = @holding_illustration_western + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/western_city" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_western } + } + asset = { + type = pdxmesh + names = { + "building_mena_city_02_mesh" + } + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mena } + } + asset = { + type = pdxmesh + names = { + "building_india_city_02_mesh" + } + illustration = @holding_illustration_india + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/indian_city" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_india } + } + asset = { + type = pdxmesh + names = { + "building_mediterranean_city_02_mesh" + } + illustration = @holding_illustration_mediterranean + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mediterranean_city" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mediterranean } } can_construct_potential = { @@ -1459,16 +1599,7 @@ city_04 = { } #Steppe fallbacks - #Iranian - asset = { - type = pdxmesh - name = "fp3_building_persian_city_02_a_01_mesh" - requires_dlc_flag = legacy_of_persia - illustration = @holding_illustration_iranian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 3 } } - graphical_cultures = { steppe_building_gfx } - } - #mena + #In steppe asset = { type = pdxmesh names = { @@ -1477,6 +1608,59 @@ city_04 = { illustration = @holding_illustration_mena soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 3 } } graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + } + asset = { + type = pdxmesh + names = { + "building_mena_city_02_mesh" + } + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 3 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_siberia } + } + + #Elsewhere + asset = { + type = pdxmesh + names = { + "building_western_city_02_mesh" + } + illustration = @holding_illustration_western + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/western_city" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_western } + } + asset = { + type = pdxmesh + names = { + "building_mena_city_02_mesh" + } + illustration = @holding_illustration_mena + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mena_city" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mena } + } + asset = { + type = pdxmesh + names = { + "building_india_city_02_mesh" + } + illustration = @holding_illustration_india + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/indian_city" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_india } + } + asset = { + type = pdxmesh + names = { + "building_mediterranean_city_02_mesh" + } + illustration = @holding_illustration_mediterranean + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mediterranean_city" soundparameter = { "Tier" = 2 } } + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_mediterranean } } can_construct_potential = { @@ -1632,7 +1816,7 @@ guild_halls_01 = { modifier = { add = 500 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } @@ -1670,7 +1854,7 @@ guild_halls_02 = { modifier = { add = 9 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } @@ -1723,7 +1907,7 @@ guild_halls_03 = { modifier = { add = 8 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } @@ -1777,7 +1961,7 @@ guild_halls_04 = { modifier = { add = 7 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } @@ -1830,7 +2014,7 @@ guild_halls_05 = { modifier = { add = 6 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } @@ -1883,7 +2067,7 @@ guild_halls_06 = { modifier = { add = 5 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } @@ -1936,7 +2120,7 @@ guild_halls_07 = { modifier = { add = 4 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } @@ -1988,7 +2172,7 @@ guild_halls_08 = { modifier = { add = 3 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } diff --git a/common/buildings/00_duchy_capital_buildings.txt b/common/buildings/00_duchy_capital_buildings.txt index d98f8015..451d9822 100644 --- a/common/buildings/00_duchy_capital_buildings.txt +++ b/common/buildings/00_duchy_capital_buildings.txt @@ -728,7 +728,7 @@ march_01 = { supply_limit_mult = 0.25 levy_reinforcement_rate = 0.25 garrison_size = 0.25 - hostile_raid_time = 0.2 + hostile_raid_time = 0.25 defender_holding_advantage = 5 additional_fort_level = normal_building_fort_level_tier_2 travel_danger = -10 @@ -736,6 +736,10 @@ march_01 = { desert_mountains_tax_mult = 0.15 hills_tax_mult = 0.15 } + + effect_desc = marches_effect_desc + + flag = raid_protection_1 next_building = march_02 @@ -787,7 +791,7 @@ march_02 = { supply_limit_mult = 0.5 levy_reinforcement_rate = 0.5 garrison_size = 0.5 - hostile_raid_time = 0.3 + hostile_raid_time = 0.5 defender_holding_advantage = 10 additional_fort_level = normal_building_fort_level_tier_4 travel_danger = -20 @@ -795,6 +799,10 @@ march_02 = { desert_mountains_tax_mult = 0.2 hills_tax_mult = 0.2 } + + effect_desc = marches_effect_2_desc + + flag = raid_protection_2 next_building = march_03 @@ -836,7 +844,7 @@ march_03 = { supply_limit_mult = 1 levy_reinforcement_rate = 1 garrison_size = 1 - hostile_raid_time = 0.4 + hostile_raid_time = 0.75 defender_holding_advantage = 15 additional_fort_level = normal_building_fort_level_tier_6 travel_danger = -30 @@ -844,9 +852,12 @@ march_03 = { desert_mountains_tax_mult = 0.3 hills_tax_mult = 0.3 } + + effect_desc = marches_effect_2_desc type = duchy_capital + flag = raid_protection_2 flag = fully_upgraded_duchy_capital_building ai_value = { @@ -2399,53 +2410,6 @@ royal_forest_03 = { ########## # Megalith ########## -pyramids_02 = { - - construction_time = very_slow_construction_time - - type_icon = "icon_buildings_pyramids.dds" - - can_construct_potential = { - building_requirement_tribal = no - building_requirement_castle_city_church = { LEVEL = 01 } - scope:holder = { - faith = { - has_doctrine_parameter = can_build_pyramids - } - } - } - - cost_gold = 2000 - - character_modifier = { - monthly_dynasty_prestige_mult = 0.05 - short_reign_duration_mult = -0.2 - monthly_piety_gain_mult = 0.1 - } - county_modifier = { - development_growth = 0.2 - } - province_modifier = { - monthly_income = good_building_tax_tier_2 - } - - - ai_value = { - base = 100 - modifier = { # Fill all building slots before going for duchy buildings - factor = 0 - free_building_slots > 0 - } - modifier = { # Less likely when the AI should build regular buildings first - factor = 0.1 - scope:holder = { ai_should_focus_on_building_in_their_capital = yes } - } - } - - type = duchy_capital - - flag = travel_point_of_interest_wonder -} great_megalith_01 = { construction_time = very_slow_construction_time diff --git a/common/buildings/00_nomad_buildings.txt b/common/buildings/00_nomad_buildings.txt new file mode 100644 index 00000000..dea6c6fe --- /dev/null +++ b/common/buildings/00_nomad_buildings.txt @@ -0,0 +1,221 @@ +### Nomad Camp (Base Building) +@holding_illustration_nomad = "gfx/interface/illustrations/holding_types/mpo_nomad_holding.dds" +@holding_illustration_herder = "gfx/interface/illustrations/holding_types/mpo_herder_camp.dds" +nomadic_camp_01 = { + construction_time = standard_construction_time + + asset = { + type = pdxmesh + name = "mpo_mongol_01_mesh" + domicile_building = yurt_main_01 + graphical_cultures = { steppe_building_gfx } + illustration = @holding_illustration_nomad + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mongolian_city" soundparameter = { "Tier" = 0 } } + } + asset = { + type = pdxmesh + name = "mpo_mongol_02_mesh" + domicile_building = yurt_main_02 + graphical_cultures = { steppe_building_gfx } + illustration = @holding_illustration_nomad + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mongolian_city" soundparameter = { "Tier" = 0 } } + } + asset = { + type = pdxmesh + name = "mpo_mongol_03_mesh" + domicile_building = yurt_main_03 + graphical_cultures = { steppe_building_gfx } + illustration = @holding_illustration_nomad + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mongolian_city" soundparameter = { "Tier" = 0 } } + } + asset = { + type = pdxmesh + name = "mpo_mongol_04_mesh" + domicile_building = yurt_main_04 + graphical_cultures = { steppe_building_gfx } + illustration = @holding_illustration_nomad + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mongolian_city" soundparameter = { "Tier" = 0 } } + } + asset = { + type = pdxmesh + name = "mpo_mongol_05_mesh" + domicile_building = yurt_main_05 + graphical_cultures = { steppe_building_gfx } + illustration = @holding_illustration_nomad + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mongolian_city" soundparameter = { "Tier" = 0 } } + } + asset = { + type = pdxmesh + name = "mpo_mongol_05_mesh" + domicile_building = yurt_main_06 + graphical_cultures = { steppe_building_gfx } + illustration = @holding_illustration_nomad + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mongolian_city" soundparameter = { "Tier" = 0 } } + } + asset = { + type = pdxmesh + name = "mpo_mongol_01_mesh" + graphical_cultures = { steppe_building_gfx } + illustration = @holding_illustration_nomad + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mongolian_city" soundparameter = { "Tier" = 0 } } + } + + is_enabled = { + scope:holder = { government_allows = uses_county_fertility } + } + + can_construct_potential = { + scope:holder = { government_allows = uses_county_fertility } + } + + can_construct_showing_failures_only = { + scope:holder = { government_allows = uses_county_fertility } + } + + cost_prestige = 1 + + province_modifier = { + county_fertility_growth_add = 1 + stationed_maa_damage_mult = 0.05 + } + + county_modifier = { + epidemic_resistance = 25 + hostile_raid_time = 1 + } + + character_modifier = { + county_fertility_growth_mult = 0.5 + } + + province_terrain_modifier = { + parameter = forest_nomadic_cultrad_stationing_bonus + terrain = forest + stationed_maa_damage_mult = nomadic_cultural_maa_bonus_medium_value + stationed_maa_toughness_mult = nomadic_cultural_maa_bonus_medium_value + } + + province_terrain_modifier = { + parameter = forest_nomadic_cultrad_stationing_bonus + terrain = taiga + stationed_maa_damage_mult = nomadic_cultural_maa_bonus_medium_value + stationed_maa_toughness_mult = nomadic_cultural_maa_bonus_medium_value + } + + province_terrain_modifier = { + parameter = hills_nomadic_cultrad_stationing_bonus + terrain = hills + stationed_maa_damage_mult = nomadic_cultural_maa_bonus_medium_value + stationed_maa_toughness_mult = nomadic_cultural_maa_bonus_medium_value + } + + province_terrain_modifier = { + parameter = mountains_nomadic_cultrad_stationing_bonus + terrain = mountains + stationed_maa_damage_mult = nomadic_cultural_maa_bonus_medium_value + stationed_maa_toughness_mult = nomadic_cultural_maa_bonus_medium_value + } + + province_terrain_modifier = { + parameter = mountains_nomadic_cultrad_stationing_bonus + terrain = desert_mountains + stationed_maa_damage_mult = nomadic_cultural_maa_bonus_medium_value + stationed_maa_toughness_mult = nomadic_cultural_maa_bonus_medium_value + } + + province_terrain_modifier = { + parameter = desert_nomadic_cultrad_stationing_bonus + terrain = desert + stationed_maa_damage_mult = nomadic_cultural_maa_bonus_medium_value + stationed_maa_toughness_mult = nomadic_cultural_maa_bonus_medium_value + } + + province_terrain_modifier = { + parameter = desert_nomadic_cultrad_stationing_bonus + terrain = drylands + stationed_maa_damage_mult = nomadic_cultural_maa_bonus_medium_value + stationed_maa_toughness_mult = nomadic_cultural_maa_bonus_medium_value + } + + province_culture_modifier = { + parameter = skirmisher_nomadic_cultrad_stationing_bonus + stationed_skirmishers_damage_mult = nomadic_cultural_maa_bonus_high_value + stationed_skirmishers_damage_mult = nomadic_cultural_maa_bonus_high_value + stationed_archers_damage_mult = nomadic_cultural_maa_bonus_high_value + stationed_archers_toughness_mult = nomadic_cultural_maa_bonus_high_value + } + + province_culture_modifier = { + parameter = formation_nomadic_cultrad_stationing_bonus + stationed_maa_damage_mult = nomadic_cultural_maa_bonus_low_value + stationed_maa_toughness_mult = nomadic_cultural_maa_bonus_low_value + } + + province_culture_modifier = { + parameter = stand_fight_nomadic_cultrad_stationing_bonus + stationed_maa_toughness_mult = nomadic_cultural_maa_bonus_medium_value + } + + province_culture_modifier = { + parameter = hit_run_nomadic_cultrad_stationing_bonus + stationed_maa_damage_mult = nomadic_cultural_maa_bonus_high_value + } + + type_icon = "icon_building_nomadic_settlement.dds" + + ai_value = { + base = 100 + } +} + +### Herder Camp (Base Building) +herder_camp_01 = { + construction_time = standard_construction_time + + asset = { + type = pdxmesh + name = "mpo_herder_camp_mesh" + graphical_cultures = { steppe_building_gfx } + illustration = @holding_illustration_herder + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/City/mongolian_city" soundparameter = { "Tier" = 0 } } + } + + is_enabled = { + scope:holder = { government_allows = replenishes_county_fertility } + } + + can_construct_potential = { + scope:holder = { government_allows = replenishes_county_fertility } + } + + can_construct_showing_failures_only = { + scope:holder = { government_allows = replenishes_county_fertility } + } + + cost_prestige = 1 + + province_modifier = { + tax_mult = -0.8 + } + + county_modifier = { + travel_danger = -8 + epidemic_resistance = 25 + } + + county_culture_modifier = { + parameter = ethos_communal_herders_bonus + county_fertility_growth_add = 0.35 + } + + county_culture_modifier = { + parameter = better_herders_pasturalists + county_fertility_growth_add = 0.35 + } + + type_icon = "icon_building_nomadic_settlement.dds" + + ai_value = { + base = 100 + } +} diff --git a/common/buildings/00_special_buildings.txt b/common/buildings/00_special_buildings.txt index 597868de..9a404cca 100644 --- a/common/buildings/00_special_buildings.txt +++ b/common/buildings/00_special_buildings.txt @@ -3,6 +3,12 @@ ########### holy_site_cathedral_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } asset = { type = pdxmesh @@ -77,6 +83,13 @@ holy_site_mosque_01 = { construction_time = very_slow_construction_time type_icon = "icon_structure_cathedral_muslim.dds" + + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } can_construct_potential = { building_requirement_tribal = no @@ -144,6 +157,13 @@ holy_site_fire_temple_01 = { type = entity name = "building_special_cathedral_zoroastrian_01_a_entity" } + + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time @@ -211,6 +231,13 @@ holy_site_fire_temple_01 = { holy_site_pagan_grand_temple_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } + asset = { type = pdxmesh name = "building_special_cathedral_pagan_mesh" @@ -284,6 +311,13 @@ holy_site_pagan_grand_temple_01 = { holy_site_indian_grand_temple_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } + asset = { type = pdxmesh name = "building_special_brihadeeswarar_temple_mesh" @@ -362,6 +396,13 @@ holy_site_other_grand_temple_01 = { construction_time = very_slow_construction_time type_icon = "icon_structure_cathedral_zoroastric.dds" + + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } can_construct_potential = { building_requirement_tribal = no @@ -435,6 +476,13 @@ holy_site_mahabodhi_temple_01 = { construction_time = very_slow_construction_time type_icon = "icon_structure_mahabodhi_temple.dds" + + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } can_construct_potential = { building_requirement_tribal = no @@ -488,6 +536,13 @@ holy_site_mahabodhi_temple_01 = { ########## holy_site_imam_ali_mosque_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } + construction_time = very_slow_construction_time type_icon = "icon_structure_imam_ali_mosque.dds" @@ -544,6 +599,12 @@ holy_site_imam_ali_mosque_01 = { ########## holy_site_great_mosque_of_mecca_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } asset = { type = pdxmesh @@ -605,6 +666,12 @@ holy_site_great_mosque_of_mecca_01 = { ########## holy_site_great_mosque_of_cordoba_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } asset = { type = pdxmesh @@ -677,6 +744,12 @@ holy_site_great_mosque_of_cordoba_01 = { ########## holy_site_great_mosque_of_djenne_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } asset = { type = pdxmesh @@ -757,6 +830,12 @@ holy_site_great_mosque_of_djenne_01 = { ########## holy_site_great_mosque_of_samarra_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } asset = { type = pdxmesh @@ -837,6 +916,12 @@ holy_site_great_mosque_of_samarra_01 = { ########## holy_site_cologne_cathedral_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time type_icon = "icon_structure_cologne_cathedral.dds" @@ -921,6 +1006,12 @@ holy_site_cologne_cathedral_01 = { ########## holy_site_canterbury_cathedral_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time asset = { @@ -1007,6 +1098,12 @@ holy_site_canterbury_cathedral_01 = { } holy_site_canterbury_cathedral_02 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time asset = { @@ -1093,6 +1190,12 @@ holy_site_canterbury_cathedral_02 = { } holy_site_canterbury_cathedral_03 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time asset = { @@ -1183,6 +1286,12 @@ holy_site_canterbury_cathedral_03 = { ########## holy_site_prophetic_mosque_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time type_icon = "icon_structure_cathedral_muslim.dds" @@ -1273,7 +1382,7 @@ doges_palace_01 = { # Should technically be burnt down/rebuilt, but this is most custom_tooltip = { text = government_is_not_republic_or_admin_desc OR = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic government_has_flag = government_is_administrative } } @@ -2277,7 +2386,12 @@ london_bridge_01 = { ########## notre_dame_01 = { - + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } asset = { type = pdxmesh name = "building_special_notre_dame_mesh" @@ -2344,6 +2458,12 @@ notre_dame_01 = { ########## brihadeeswarar_temple_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } asset = { type = pdxmesh @@ -2410,6 +2530,12 @@ brihadeeswarar_temple_01 = { ########## shwedagon_pagoda_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time type_icon = "icon_structure_shwedagon_pagoda.dds" @@ -2467,6 +2593,12 @@ shwedagon_pagoda_01 = { ########## ananda_temple_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time type_icon = "icon_structure_shwedagon_pagoda.dds" @@ -2524,6 +2656,12 @@ ananda_temple_01 = { ########## the_friday_mosque_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time type_icon = "icon_structure_the_friday_mosque.dds" @@ -2695,6 +2833,12 @@ palace_of_aachen_01 = { ########## hagia_sophia_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } asset = { type = pdxmesh @@ -2750,6 +2894,12 @@ hagia_sophia_01 = { } hagia_sophia_02 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } asset = { type = pdxmesh @@ -2815,6 +2965,12 @@ hagia_sophia_02 = { ########## dome_of_the_rock_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time type_icon = "icon_structure_dome_of_the_rock.dds" @@ -2871,6 +3027,12 @@ dome_of_the_rock_01 = { } temple_in_jerusalem_01 = { + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_effect_desc + } + } construction_time = very_slow_construction_time type_icon = "icon_structure_temple_in_jerusalem.dds" @@ -6560,3 +6722,78 @@ cilician_gates = { flag = travel_point_of_interest_martial } + +########## +# Pleasure Dome +########## +pleasure_dome = { + construction_time = very_slow_construction_time + effect_desc = pleasure_dome_effect_desc + + type_icon = "icon_pleasure_dome.dds" + + character_modifier = { + monthly_prestige_gain_mult = 0.15 + owned_hostile_scheme_success_chance_add = 25 + owned_personal_scheme_success_chance_add = 25 + court_grandeur_baseline_add = 12 + monthly_income_from_herd_mult = 0.15 + herd_capacity_mult = 0.25 + herd_conversion = 0.005 + } + + province_modifier = { + monthly_income = excellent_building_tax_tier_4 + } + + type = special +} + +########## +# Burkhan Khaldun +########## + +burkhan_khaldun_01 = { + + asset = { + type = pdxmesh + name = "mpo_building_special_burkhan_khaldun_mesh" + } + + + construction_time = very_slow_construction_time + + type_icon = "icon_structure_burkhan_khaldun.dds" + + can_construct_potential = {} + + cost_gold = 300 + + character_modifier = { + monthly_piety = 0.25 + monthly_dynasty_prestige_mult = 0.05 + clergy_opinion = 5 + } + + province_modifier = { + fort_level = 2 + defender_holding_advantage = normal_building_advantage_tier_3 + } + + county_modifier = { + county_opinion_add = 5 + mountains_fertility_growth_mult = 0.25 + } + + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + + type = special + + flag = travel_point_of_interest_natural_feature +} diff --git a/common/buildings/00_standard_economy_buildings.txt b/common/buildings/00_standard_economy_buildings.txt index 620ca9c1..b1463856 100644 --- a/common/buildings/00_standard_economy_buildings.txt +++ b/common/buildings/00_standard_economy_buildings.txt @@ -2820,7 +2820,7 @@ hunting_grounds_01 = { modifier = { factor = 0 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } NOT = { has_building_or_higher = guild_halls_01 @@ -4846,7 +4846,7 @@ logging_camps_01 = { modifier = { factor = 0 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } NOT = { has_building_or_higher = guild_halls_01 @@ -5701,7 +5701,7 @@ hill_farms_01 = { modifier = { factor = 0 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } NOT = { has_building_or_higher = guild_halls_01 @@ -6965,7 +6965,7 @@ quarries_01 = { modifier = { factor = 0 scope:holder = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } NOT = { has_building_or_higher = guild_halls_01 diff --git a/common/buildings/00_temple_buildings.txt b/common/buildings/00_temple_buildings.txt index c4d0dd10..26010688 100644 --- a/common/buildings/00_temple_buildings.txt +++ b/common/buildings/00_temple_buildings.txt @@ -7,11 +7,12 @@ @illustration_northern_pagan = "gfx/interface/illustrations/holding_types/temple_northern_pagan.dds" @illustration_iberian_christian = "gfx/interface/illustrations/holding_types/fp2_temple_iberian_christian.dds" @illustration_iberian_islamic = "gfx/interface/illustrations/holding_types/fp2_temple_iberian_islamic.dds" -@illustration_iranian_zoroastrian = "gfx/interface/illustrations/holding_types/fp3_temple_iranian_zoroastrian.dds" +@illustration_iranian_zoroastrian = "gfx/interface/illustrations/holding_types/fp3_temple_iranian_zoroastrian.dds" +@illustration_tengri = "gfx/interface/illustrations/holding_types/mpo_temple_steppe.dds" temple_01 = { construction_time = slow_construction_time - + ### GENERIC ### asset = { type = pdxmesh @@ -40,7 +41,7 @@ temple_01 = { soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/generic_temple" soundparameter = { "Tier" = 0 } } graphical_regions = { "graphical_mena" } } - + asset = { type = pdxmesh name = "building_western_temple_pagan_01_mesh" @@ -48,7 +49,7 @@ temple_01 = { soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/pagan_temple" soundparameter = { "Tier" = 0 } } graphical_faiths = { "pagan_gfx" } } - + ### DHARMIC ### asset = { type = pdxmesh @@ -81,7 +82,7 @@ temple_01 = { graphical_faiths = { "dharmic_gfx" } graphical_regions = { "graphical_mena" } } - + ### ORTHODOX ### asset = { type = pdxmesh @@ -114,7 +115,7 @@ temple_01 = { graphical_faiths = { "orthodox_gfx" } graphical_regions = { "graphical_mena" } } - + ### CATHOLIC ### asset = { type = pdxmesh @@ -147,7 +148,7 @@ temple_01 = { graphical_faiths = { "catholic_gfx" } graphical_regions = { "graphical_mena" } } - + ### ISLAMIC ### asset = { type = pdxmesh @@ -221,16 +222,25 @@ temple_01 = { name = "fp3_building_persian_temple_01_a_01_entity" requires_dlc_flag = legacy_of_persia illustration = @illustration_iranian_zoroastrian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/mosque_temple" soundparameter = { "Tier" = 0 } } ##todo_cd_polish fix + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/mosque_temple" soundparameter = { "Tier" = 0 } } ##todo_cd_polish fix graphical_faiths = { "zoroastrian_gfx" } graphical_cultures = { iranian_building_gfx } graphical_regions = { graphical_mena } } - + + # MPO Tengri + asset = { + type = entity + name = "mpo_mongol_temple_01_entity" + illustration = @illustration_tengri + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/pagan_temple" soundparameter = { "Tier" = 0 } } + graphical_faiths = { "tengrism_gfx" } + } + can_construct_potential = { barony_cannot_construct_holding = no } - + can_construct = { trigger_if = { limit = { @@ -253,9 +263,9 @@ temple_01 = { } } } - + } - + can_construct_showing_failures_only = { trigger_if = { limit = { @@ -273,10 +283,14 @@ temple_01 = { has_cultural_parameter = tribals_can_into_temples } } + building_requirement_nomad = no + building_requirement_nomad_holding_in_county = yes + building_requirement_herder = no + building_requirement_herder_holding_in_county = yes } cost_gold = main_building_tier_1_cost next_building = temple_02 - + levy = poor_building_levy_tier_1 max_garrison = normal_building_max_garrison_tier_1 garrison_reinforcement_factor = building_garrison_reinforcement_factor_tier_1 @@ -366,8 +380,8 @@ temple_01 = { limit = { county.holder = { has_dlc_feature = legends } county.holder = { - NOR = { - has_game_rule = historical_legends_only + NOR = { + has_game_rule = historical_legends_only has_personal_legend_seed = holy } } @@ -412,7 +426,7 @@ temple_01 = { } province_owner = { save_scope_as = owner_of_province - + scope:owner_of_province = { if = { #Religious liege asked me to build a temple limit = { @@ -495,7 +509,7 @@ temple_01 = { } } } - + ai_value = { base = 100 modifier = { @@ -519,7 +533,7 @@ temple_01 = { temple_02 = { construction_time = slow_construction_time - + ### GENERIC ### asset = { type = pdxmesh @@ -548,7 +562,7 @@ temple_02 = { soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/generic_temple" soundparameter = { "Tier" = 0 } } graphical_regions = { "graphical_mena" } } - + asset = { type = pdxmesh name = "building_western_temple_pagan_01_mesh" @@ -556,7 +570,7 @@ temple_02 = { soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/pagan_temple" soundparameter = { "Tier" = 0 } } graphical_faiths = { "pagan_gfx" } } - + ### DHARMIC ### asset = { type = pdxmesh @@ -589,7 +603,7 @@ temple_02 = { graphical_faiths = { "dharmic_gfx" } graphical_regions = { "graphical_mena" } } - + ### ORTHODOX ### asset = { type = pdxmesh @@ -622,7 +636,7 @@ temple_02 = { graphical_faiths = { "orthodox_gfx" } graphical_regions = { "graphical_mena" } } - + ### CATHOLIC ### asset = { type = pdxmesh @@ -655,7 +669,7 @@ temple_02 = { graphical_faiths = { "catholic_gfx" } graphical_regions = { "graphical_mena" } } - + ### ISLAMIC ### asset = { type = pdxmesh @@ -729,12 +743,21 @@ temple_02 = { name = "fp3_building_persian_temple_01_a_01_entity" requires_dlc_flag = legacy_of_persia illustration = @illustration_iranian_zoroastrian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/mosque_temple" soundparameter = { "Tier" = 0 } } ##todo_cd_polish fix + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/mosque_temple" soundparameter = { "Tier" = 0 } } ##todo_cd_polish fix graphical_faiths = { "zoroastrian_gfx" } graphical_cultures = { iranian_building_gfx } graphical_regions = { graphical_mena } } + # MPO Tengri + asset = { + type = entity + name = "mpo_mongol_temple_01_entity" + illustration = @illustration_tengri + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/pagan_temple" soundparameter = { "Tier" = 0 } } + graphical_faiths = { "tengrism_gfx" } + } + can_construct_potential = { building_requirement_tribal = no } @@ -760,7 +783,7 @@ temple_02 = { } cost_gold = main_building_tier_2_cost next_building = temple_03 - + levy = poor_building_levy_tier_3 max_garrison = normal_building_max_garrison_tier_3 garrison_reinforcement_factor = building_garrison_reinforcement_factor_tier_2 @@ -771,7 +794,7 @@ temple_02 = { stationed_siege_weapon_siege_value_mult = low_maa_siege_value_tier_2 travel_danger = -12 } - + province_terrain_modifier = { parameter = coastal_holding_bonuses is_coastal = yes @@ -791,7 +814,7 @@ temple_02 = { } flag = temple - + on_complete = { if = { limit = { @@ -858,9 +881,9 @@ temple_02 = { } } } - + ai_value = { - base = 6 + base = 6 modifier = { factor = 2 scope:holder.capital_province = this @@ -883,7 +906,7 @@ temple_02 = { temple_03 = { construction_time = slow_construction_time - + ### GENERIC ### asset = { type = pdxmesh @@ -912,7 +935,7 @@ temple_03 = { soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/generic_temple" soundparameter = { "Tier" = 1 } } graphical_regions = { "graphical_mena" } } - + asset = { type = pdxmesh name = "building_western_temple_pagan_02_mesh" @@ -920,7 +943,7 @@ temple_03 = { soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/pagan_temple" soundparameter = { "Tier" = 1 } } graphical_faiths = { "pagan_gfx" } } - + ### DHARMIC ### asset = { type = pdxmesh @@ -953,7 +976,7 @@ temple_03 = { graphical_faiths = { "dharmic_gfx" } graphical_regions = { "graphical_mena" } } - + ### ORTHODOX ### asset = { type = pdxmesh @@ -986,7 +1009,7 @@ temple_03 = { graphical_faiths = { "orthodox_gfx" } graphical_regions = { "graphical_mena" } } - + ### CATHOLIC ### asset = { type = pdxmesh @@ -1019,7 +1042,7 @@ temple_03 = { graphical_faiths = { "catholic_gfx" } graphical_regions = { "graphical_mena" } } - + ### ISLAMIC ### asset = { type = pdxmesh @@ -1093,12 +1116,21 @@ temple_03 = { name = "fp3_building_persian_temple_02_a_01_entity" requires_dlc_flag = legacy_of_persia illustration = @illustration_iranian_zoroastrian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/mosque_temple" soundparameter = { "Tier" = 1 } } ##todo_cd_polish fix + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/mosque_temple" soundparameter = { "Tier" = 1 } } ##todo_cd_polish fix graphical_faiths = { "zoroastrian_gfx" } graphical_cultures = { iranian_building_gfx } graphical_regions = { graphical_mena } } - + + # MPO Tengri + asset = { + type = entity + name = "mpo_mongol_temple_01_entity" + illustration = @illustration_tengri + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/pagan_temple" soundparameter = { "Tier" = 0 } } + graphical_faiths = { "tengrism_gfx" } + } + can_construct_potential = { building_requirement_tribal = no } @@ -1124,7 +1156,7 @@ temple_03 = { } cost_gold = main_building_tier_3_cost next_building = temple_04 - + levy = poor_building_levy_tier_5 max_garrison = normal_building_max_garrison_tier_5 garrison_reinforcement_factor = building_garrison_reinforcement_factor_tier_3 @@ -1154,7 +1186,7 @@ temple_03 = { } flag = temple - + on_complete = { if = { limit = { @@ -1221,9 +1253,9 @@ temple_03 = { } } } - + ai_value = { - base = 5 + base = 5 modifier = { factor = 2 scope:holder.capital_province = this @@ -1238,7 +1270,7 @@ temple_03 = { temple_04 = { construction_time = slow_construction_time - + ### GENERIC ### asset = { type = pdxmesh @@ -1267,7 +1299,7 @@ temple_04 = { soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/generic_temple" soundparameter = { "Tier" = 1 } } graphical_regions = { "graphical_mena" } } - + asset = { type = pdxmesh name = "building_western_temple_pagan_02_mesh" @@ -1275,7 +1307,7 @@ temple_04 = { soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/pagan_temple" soundparameter = { "Tier" = 1 } } graphical_faiths = { "pagan_gfx" } } - + ### DHARMIC ### asset = { type = pdxmesh @@ -1308,7 +1340,7 @@ temple_04 = { graphical_faiths = { "dharmic_gfx" } graphical_regions = { "graphical_mena" } } - + ### ORTHODOX ### asset = { type = pdxmesh @@ -1341,7 +1373,7 @@ temple_04 = { graphical_faiths = { "orthodox_gfx" } graphical_regions = { "graphical_mena" } } - + ### CATHOLIC ### asset = { type = pdxmesh @@ -1374,7 +1406,7 @@ temple_04 = { graphical_faiths = { "catholic_gfx" } graphical_regions = { "graphical_mena" } } - + ### ISLAMIC ### asset = { type = pdxmesh @@ -1447,12 +1479,21 @@ temple_04 = { name = "fp3_building_persian_temple_02_a_01_entity" requires_dlc_flag = legacy_of_persia illustration = @illustration_iranian_zoroastrian - soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/mosque_temple" soundparameter = { "Tier" = 1 } } ##todo_cd_polish fix + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/mosque_temple" soundparameter = { "Tier" = 1 } } ##todo_cd_polish fix graphical_faiths = { "zoroastrian_gfx" } graphical_cultures = { iranian_building_gfx } graphical_regions = { graphical_mena } } - + + # MPO Tengri + asset = { + type = entity + name = "mpo_mongol_temple_01_entity" + illustration = @illustration_tengri + soundeffect = { soundeffect = "event:/SFX/Ambience/3DMapEmitters/Holdings/Temples/pagan_temple" soundparameter = { "Tier" = 0 } } + graphical_faiths = { "tengrism_gfx" } + } + can_construct_potential = { building_requirement_tribal = no } @@ -1477,7 +1518,7 @@ temple_04 = { } } cost_gold = main_building_tier_4_cost - + levy = poor_building_levy_tier_7 max_garrison = normal_building_max_garrison_tier_7 garrison_reinforcement_factor = building_garrison_reinforcement_factor_tier_4 @@ -1507,7 +1548,7 @@ temple_04 = { } flag = temple - + on_complete = { if = { limit = { @@ -1560,7 +1601,7 @@ temple_04 = { save_temporary_scope_as = holder_scope } custom_tooltip = zealot_vassal_approves_holding_upgrade - + hidden_effect = { every_vassal = { limit = { @@ -1575,9 +1616,9 @@ temple_04 = { } } } - + ai_value = { - base = 4 + base = 4 modifier = { factor = 2 scope:holder.capital_province = this @@ -1611,23 +1652,23 @@ scriptorium_01 = { } cost_gold = normal_building_tier_1_cost - + county_holder_character_modifier = { owned_legend_spread_mult = 0.05 legitimacy_gain_mult = 0.01 } - + character_modifier = { monthly_piety = 0.1 } county_modifier = { monthly_county_control_growth_add = 0.1 } - + next_building = scriptorium_02 type_icon = "icon_building_library.dds" - + ai_value = { base = 10 ai_tier_1_building_modifier = yes @@ -1684,19 +1725,19 @@ scriptorium_02 = { } cost_gold = normal_building_tier_2_cost - + county_holder_character_modifier = { owned_legend_spread_mult = 0.1 legitimacy_gain_mult = 0.02 } - + character_modifier = { monthly_piety = 0.2 } county_modifier = { monthly_county_control_growth_add = 0.2 } - + next_building = scriptorium_03 ai_value = { base = 9 @@ -1725,19 +1766,19 @@ scriptorium_03 = { } cost_gold = normal_building_tier_3_cost - + county_holder_character_modifier = { owned_legend_spread_mult = 0.15 legitimacy_gain_mult = 0.03 } - + character_modifier = { monthly_piety = 0.3 } county_modifier = { monthly_county_control_growth_add = 0.3 } - + next_building = scriptorium_04 ai_value = { base = 8 @@ -1766,12 +1807,12 @@ scriptorium_04 = { } cost_gold = normal_building_tier_4_cost - + county_holder_character_modifier = { owned_legend_spread_mult = 0.2 legitimacy_gain_mult = 0.04 } - + character_modifier = { monthly_piety = 0.4 } @@ -1807,12 +1848,12 @@ scriptorium_05 = { } cost_gold = normal_building_tier_5_cost - + county_holder_character_modifier = { owned_legend_spread_mult = 0.25 legitimacy_gain_mult = 0.05 } - + character_modifier = { monthly_piety = 0.5 } @@ -1848,12 +1889,12 @@ scriptorium_06 = { } cost_gold = normal_building_tier_6_cost - + county_holder_character_modifier = { owned_legend_spread_mult = 0.3 legitimacy_gain_mult = 0.06 } - + character_modifier = { monthly_piety = 0.6 } @@ -1889,12 +1930,12 @@ scriptorium_07 = { } cost_gold = normal_building_tier_7_cost - + county_holder_character_modifier = { owned_legend_spread_mult = 0.35 legitimacy_gain_mult = 0.07 } - + character_modifier = { monthly_piety = 0.7 } @@ -1930,12 +1971,12 @@ scriptorium_08 = { } cost_gold = normal_building_tier_8_cost - + county_holder_character_modifier = { owned_legend_spread_mult = 0.4 legitimacy_gain_mult = 0.08 } - + character_modifier = { monthly_piety = 0.8 } @@ -1968,12 +2009,12 @@ monastic_schools_01 = { } cost_gold = normal_building_tier_1_cost - + character_modifier = { - monthly_piety = 0.1 + monthly_piety = 0.1 } county_modifier = { - monthly_county_control_growth_add = 0.1 + monthly_county_control_growth_add = 0.1 } province_modifier = { monthly_income = poor_building_tax_tier_1 @@ -1989,11 +2030,11 @@ monastic_schools_01 = { parameter = monastery_prowess_martial_bonus prowess = 1 } - + next_building = monastic_schools_02 type_icon = "icon_building_monastic_schools.dds" - + ai_value = { base = 10 ai_tier_1_building_modifier = yes @@ -2033,12 +2074,12 @@ monastic_schools_02 = { } cost_gold = normal_building_tier_2_cost - + character_modifier = { monthly_piety = 0.2 } county_modifier = { - monthly_county_control_growth_add = 0.2 + monthly_county_control_growth_add = 0.2 } province_modifier = { monthly_income = poor_building_tax_tier_2 @@ -2056,7 +2097,7 @@ monastic_schools_02 = { prowess = 1 martial = 1 } - + next_building = monastic_schools_03 ai_value = { base = 9 @@ -2103,12 +2144,12 @@ monastic_schools_03 = { } cost_gold = normal_building_tier_3_cost - + character_modifier = { monthly_piety = 0.3 } county_modifier = { - monthly_county_control_growth_add = 0.3 + monthly_county_control_growth_add = 0.3 } province_modifier = { monthly_income = poor_building_tax_tier_3 @@ -2126,7 +2167,7 @@ monastic_schools_03 = { prowess = 2 martial = 1 } - + next_building = monastic_schools_04 ai_value = { base = 8 @@ -2173,12 +2214,12 @@ monastic_schools_04 = { } cost_gold = normal_building_tier_4_cost - + character_modifier = { monthly_piety = 0.4 } county_modifier = { - monthly_county_control_growth_add = 0.4 + monthly_county_control_growth_add = 0.4 } province_modifier = { monthly_income = poor_building_tax_tier_4 @@ -2196,7 +2237,7 @@ monastic_schools_04 = { prowess = 2 martial = 2 } - + next_building = monastic_schools_05 ai_value = { base = 7 @@ -2243,12 +2284,12 @@ monastic_schools_05 = { } cost_gold = normal_building_tier_5_cost - + character_modifier = { monthly_piety = 0.5 } county_modifier = { - monthly_county_control_growth_add = 0.5 + monthly_county_control_growth_add = 0.5 } province_modifier = { monthly_income = poor_building_tax_tier_5 @@ -2266,7 +2307,7 @@ monastic_schools_05 = { prowess = 3 martial = 2 } - + next_building = monastic_schools_06 ai_value = { base = 6 @@ -2313,12 +2354,12 @@ monastic_schools_06 = { } cost_gold = normal_building_tier_6_cost - + character_modifier = { monthly_piety = 0.6 } county_modifier = { - monthly_county_control_growth_add = 0.6 + monthly_county_control_growth_add = 0.6 } province_modifier = { monthly_income = poor_building_tax_tier_6 @@ -2336,7 +2377,7 @@ monastic_schools_06 = { prowess = 3 martial = 3 } - + next_building = monastic_schools_07 ai_value = { base = 5 @@ -2383,12 +2424,12 @@ monastic_schools_07 = { } cost_gold = normal_building_tier_7_cost - + character_modifier = { monthly_piety = 0.7 } county_modifier = { - monthly_county_control_growth_add = 0.7 + monthly_county_control_growth_add = 0.7 } province_modifier = { monthly_income = poor_building_tax_tier_7 @@ -2406,7 +2447,7 @@ monastic_schools_07 = { prowess = 4 martial = 3 } - + next_building = monastic_schools_08 ai_value = { base = 4 @@ -2451,14 +2492,14 @@ monastic_schools_08 = { can_construct_showing_failures_only = { building_requirement_tribal = no } - + cost_gold = normal_building_tier_8_cost - + character_modifier = { monthly_piety = 0.8 } county_modifier = { - monthly_county_control_growth_add = 0.8 + monthly_county_control_growth_add = 0.8 } province_modifier = { monthly_income = poor_building_tax_tier_8 @@ -2476,7 +2517,7 @@ monastic_schools_08 = { prowess = 4 martial = 4 } - + ai_value = { base = 3 ai_general_building_modifier = yes @@ -2515,7 +2556,7 @@ megalith_01 = { show_disabled = yes cost_gold = normal_building_tier_1_cost - + character_modifier = { monthly_piety = poor_building_tax_tier_1 } @@ -2525,11 +2566,11 @@ megalith_01 = { } province_modifier = { } - + next_building = megalith_02 type_icon = "icon_megalith.dds" - + ai_value = { base = 10 ai_tier_1_building_modifier = yes @@ -2573,7 +2614,7 @@ megalith_02 = { } cost_gold = normal_building_tier_2_cost - + character_modifier = { monthly_piety = poor_building_tax_tier_2 } @@ -2583,7 +2624,7 @@ megalith_02 = { } province_modifier = { } - + next_building = megalith_03 ai_value = { base = 9 @@ -2616,7 +2657,7 @@ megalith_03 = { } cost_gold = normal_building_tier_3_cost - + character_modifier = { monthly_piety = poor_building_tax_tier_3 } @@ -2626,7 +2667,7 @@ megalith_03 = { } province_modifier = { } - + next_building = megalith_04 ai_value = { base = 8 @@ -2659,7 +2700,7 @@ megalith_04 = { } cost_gold = normal_building_tier_4_cost - + character_modifier = { monthly_piety = poor_building_tax_tier_4 } @@ -2670,7 +2711,7 @@ megalith_04 = { } province_modifier = { } - + next_building = megalith_05 ai_value = { base = 7 @@ -2703,7 +2744,7 @@ megalith_05 = { } cost_gold = normal_building_tier_5_cost - + character_modifier = { monthly_piety = poor_building_tax_tier_5 monthly_prestige = poor_building_tax_tier_1 @@ -2715,7 +2756,7 @@ megalith_05 = { } province_modifier = { } - + next_building = megalith_06 ai_value = { base = 6 @@ -2748,7 +2789,7 @@ megalith_06 = { } cost_gold = normal_building_tier_5_cost - + character_modifier = { monthly_piety = poor_building_tax_tier_6 monthly_prestige = poor_building_tax_tier_2 @@ -2760,7 +2801,7 @@ megalith_06 = { } province_modifier = { } - + next_building = megalith_07 ai_value = { base = 5 @@ -2793,7 +2834,7 @@ megalith_07 = { } cost_gold = normal_building_tier_5_cost - + character_modifier = { monthly_piety = poor_building_tax_tier_7 monthly_prestige = poor_building_tax_tier_3 @@ -2805,7 +2846,7 @@ megalith_07 = { } province_modifier = { } - + next_building = megalith_08 ai_value = { base = 4 @@ -2838,7 +2879,7 @@ megalith_08 = { } cost_gold = normal_building_tier_5_cost - + character_modifier = { monthly_piety = poor_building_tax_tier_8 monthly_prestige = poor_building_tax_tier_4 @@ -2850,7 +2891,7 @@ megalith_08 = { } province_modifier = { } - + ai_value = { base = 3 directive_to_build_economy_modifier = yes @@ -2870,7 +2911,7 @@ breweries_01 = { } cost_gold = normal_building_tier_1_cost - + effect_desc = brewery_effect_desc county_modifier = { @@ -2920,7 +2961,7 @@ breweries_02 = { } cost_gold = normal_building_tier_2_cost - + effect_desc = brewery_effect_desc county_modifier = { @@ -2968,7 +3009,7 @@ breweries_03 = { } cost_gold = normal_building_tier_3_cost - + effect_desc = brewery_effect_desc county_modifier = { @@ -3007,7 +3048,7 @@ breweries_04 = { } cost_gold = normal_building_tier_4_cost - + effect_desc = brewery_effect_desc county_modifier = { @@ -3046,7 +3087,7 @@ breweries_05 = { } cost_gold = normal_building_tier_5_cost - + effect_desc = brewery_effect_desc county_modifier = { @@ -3085,7 +3126,7 @@ breweries_06 = { } cost_gold = normal_building_tier_6_cost - + effect_desc = brewery_effect_desc county_modifier = { @@ -3124,7 +3165,7 @@ breweries_07 = { } cost_gold = normal_building_tier_7_cost - + effect_desc = brewery_effect_desc county_modifier = { @@ -3163,7 +3204,7 @@ breweries_08 = { } cost_gold = normal_building_tier_8_cost - + effect_desc = brewery_effect_desc county_modifier = { diff --git a/common/buildings/00_tribal_buildings.txt b/common/buildings/00_tribal_buildings.txt index 81321a8a..ac59357e 100644 --- a/common/buildings/00_tribal_buildings.txt +++ b/common/buildings/00_tribal_buildings.txt @@ -99,6 +99,10 @@ tribe_01 = { stationed_maa_toughness_mult = normal_maa_toughness_tier_1 } + character_modifier = { + county_fertility_growth_mult = 0.35 + } + next_building = tribe_02 type_icon = "icon_building_longhouses.dds" @@ -173,8 +177,11 @@ tribe_02 = { can_construct_potential = { } can_construct_showing_failures_only = { - scope:holder = { - culture = { has_innovation = innovation_plenary_assemblies } + OR = { + scope:holder = { + culture = { has_innovation = innovation_plenary_assemblies } + } + mpo_permafrost_building_trigger = yes } } @@ -209,6 +216,10 @@ tribe_02 = { stationed_maa_toughness_mult = normal_maa_toughness_tier_2 } + character_modifier = { + county_fertility_growth_mult = 0.35 + } + ai_value = { base = 1 } @@ -259,9 +270,12 @@ longhouses_02 = { has_building_or_higher = tribe_01 } can_construct_showing_failures_only = { - scope:holder = { - culture = { has_innovation = innovation_barracks } - } + OR = { + mpo_permafrost_building_trigger = yes + scope:holder = { + culture = { has_innovation = innovation_barracks } + } + } } cost_prestige = expensive_building_tier_2_cost @@ -336,8 +350,11 @@ war_camps_02 = { has_building_or_higher = tribe_01 } can_construct_showing_failures_only = { - scope:holder = { - culture = { has_innovation = innovation_barracks } + OR = { + mpo_permafrost_building_trigger = yes + scope:holder = { + culture = { has_innovation = innovation_barracks } + } } } @@ -421,8 +438,11 @@ palisades_02 = { has_building_or_higher = tribe_01 } can_construct_showing_failures_only = { - scope:holder = { - culture = { has_innovation = innovation_motte } + OR = { + mpo_permafrost_building_trigger = yes + scope:holder = { + culture = { has_innovation = innovation_barracks } + } } } @@ -490,8 +510,11 @@ market_villages_02 = { has_building_or_higher = tribe_01 } can_construct_showing_failures_only = { - scope:holder = { - culture = { has_innovation = innovation_city_planning } + OR = { + mpo_permafrost_building_trigger = yes + scope:holder = { + culture = { has_innovation = innovation_barracks } + } } } diff --git a/common/buildings/99_background_graphics_buildings.txt b/common/buildings/99_background_graphics_buildings.txt index 6d8c7512..b70033de 100644 --- a/common/buildings/99_background_graphics_buildings.txt +++ b/common/buildings/99_background_graphics_buildings.txt @@ -16,8 +16,14 @@ walls_00 = { fort_level < 1 } # Using the no_wall holding graphics for cities with special walls so that they don't have double walls - has_building_or_higher = "city_wall_of_toledo_01" + has_building_or_higher = "city_wall_of_toledo_01" has_building_or_higher = "roman_wall_of_lugo_01" + has_building_or_higher = "kano_walls_01" + has_building_or_higher = "jaisalmer_fort_01" + # Herders shouldn't have walls + scope:holder = { + government_has_flag = government_is_herder + } } } } @@ -52,6 +58,8 @@ walls_01_tribal = { has_building_or_higher = "city_wall_of_toledo_01" has_building_or_higher = "roman_wall_of_lugo_01" } + # Nomads use custom walls + scope:holder = { NOT = { government_has_flag = government_is_nomadic } } } } @@ -110,10 +118,21 @@ walls_01 = { graphical_cultures = { iranian_building_gfx } graphical_regions = { graphical_mena graphical_india graphical_steppe } names = { - "fp3_building_persian_walls_01_a_01_mesh" + "fp3_building_persian_walls_01_a_01_mesh" } } - + asset = { + type = pdxmesh + requires_dlc_flag = khans_of_the_steppe + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + governments = { nomad_government } + names = { + "mpo_mongol_wall_01_mesh" + } + + } + is_enabled = { OR = { # These buildings will trigger the visual "upgrade" to this wall asset @@ -122,6 +141,10 @@ walls_01 = { has_building_or_higher = "hill_forts_01" has_building_or_higher = "ramparts_01" has_building_or_higher = "watchtowers_01" + scope:holder = { + government_has_flag = government_is_nomadic + root = { fort_level = 1 } + } } NOR = { # Disabling this level of walled graphics for holdings with special walls and other fortifications so that they always look appropriately fortified. Note: If any of these buildings are given unique 3D assets, this should be looked at again. @@ -196,7 +219,7 @@ walls_02 = { graphical_cultures = { iranian_building_gfx } graphical_regions = { graphical_mena graphical_india graphical_steppe } names = { - "fp3_building_persian_walls_02_a_01_mesh" + "fp3_building_persian_walls_02_a_01_mesh" } } @@ -206,7 +229,18 @@ walls_02 = { graphical_cultures = { byzantine_building_gfx } graphical_regions = { graphical_mediterranean } names = { - "ep3_byzantine_walls_02_mesh" + "ep3_byzantine_walls_02_mesh" + } + } + + asset = { + type = pdxmesh + requires_dlc_flag = khans_of_the_steppe + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + governments = { nomad_government } + names = { + "mpo_mongol_wall_02_mesh" } } @@ -218,6 +252,10 @@ walls_02 = { has_building_or_higher = "hill_forts_02" has_building_or_higher = "ramparts_02" has_building_or_higher = "watchtowers_02" + scope:holder = { + government_has_flag = government_is_nomadic + root = { fort_level = 2 } + } } NOR = { # Disabling this level of walled graphics for holdings with special walls and other fortifications so that they always look appropriately fortified. Note: If any of these buildings are given unique 3D assets, this should be looked at again. @@ -287,10 +325,10 @@ walls_03 = { asset = { type = pdxmesh requires_dlc_flag = legacy_of_persia - graphical_cultures = { iranian_building_gfx steppe_building_gfx } + graphical_cultures = { iranian_building_gfx } graphical_regions = { graphical_mena graphical_india graphical_steppe } names = { - "fp3_building_persian_walls_03_a_01_mesh" + "fp3_building_persian_walls_03_a_01_mesh" } } @@ -300,10 +338,21 @@ walls_03 = { graphical_cultures = { byzantine_building_gfx } graphical_regions = { graphical_mediterranean } names = { - "ep3_byzantine_walls_03_mesh" + "ep3_byzantine_walls_03_mesh" } } - + + asset = { + type = pdxmesh + requires_dlc_flag = khans_of_the_steppe + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + governments = { nomad_government } + names = { + "mpo_mongol_wall_03_mesh" + } + } + is_enabled = { scope:holder = { NOT = { government_has_flag = government_is_tribal } @@ -317,6 +366,10 @@ walls_03 = { has_building_or_higher = "walls_of_benin_01" has_building_or_higher = "walls_of_genoa_01" has_building_or_higher = "aurelian_walls_01" + scope:holder = { + government_has_flag = government_is_nomadic + root = { fort_level = 3 } + } } NOR = { # Disabling this level of walled graphics for holdings with special walls and other fortifications so that they always look appropriately fortified. Note: If any of these buildings are given unique 3D assets, this should be looked at again. @@ -383,10 +436,10 @@ walls_04 = { asset = { type = pdxmesh requires_dlc_flag = legacy_of_persia - graphical_cultures = { iranian_building_gfx steppe_building_gfx } + graphical_cultures = { iranian_building_gfx } graphical_regions = { graphical_mena graphical_india graphical_steppe } names = { - "fp3_building_persian_walls_04_a_01_mesh" + "fp3_building_persian_walls_04_a_01_mesh" } } @@ -396,10 +449,21 @@ walls_04 = { graphical_cultures = { byzantine_building_gfx } graphical_regions = { graphical_mediterranean } names = { - "ep3_byzantine_walls_04_mesh" + "ep3_byzantine_walls_04_mesh" } } - + + asset = { + type = pdxmesh + requires_dlc_flag = khans_of_the_steppe + graphical_cultures = { steppe_building_gfx } + graphical_regions = { graphical_steppe } + governments = { nomad_government } + names = { + "mpo_mongol_wall_04_mesh" + } + } + is_enabled = { scope:holder = { NOT = { government_has_flag = government_is_tribal } @@ -411,6 +475,10 @@ walls_04 = { has_building_or_higher = "ramparts_06" has_building_or_higher = "watchtowers_06" has_building_or_higher = "theodosian_walls_01" + scope:holder = { + government_has_flag = government_is_nomadic + root = { fort_level >= 4 } + } } } } diff --git a/common/buildings/ccp3_special_buildings.txt b/common/buildings/ccp3_special_buildings.txt new file mode 100644 index 00000000..793d7d91 --- /dev/null +++ b/common/buildings/ccp3_special_buildings.txt @@ -0,0 +1,1098 @@ +####### +# Drassanes +########## +drassanes_01 = { + asset = { + type = entity + name = "building_special_drassanes_01_entity" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_drassanes.dds" + can_construct_potential = { building_requirement_tribal = no } + can_construct = { scope:holder.culture = { has_innovation = innovation_castle_baileys } } + cost_gold = 1000 + character_modifier = { + naval_movement_speed_mult = 0.25 + embarkation_cost_mult = -0.25 + levy_reinforcement_rate = 0.1 + } + county_modifier = { + development_growth_factor = 0.15 + development_growth = 0.15 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_martial +} +########## +# Great Kyz Kala +########## +kyz_kala_01 = { + effect_desc = feast_cost_discount_max_desc + asset = { + type = pdxmesh + name = "building_special_kyz_kala_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_kyz_kala.dds" + cost_gold = 1000 + character_modifier = { + monthly_dynasty_prestige_mult = 0.05 + monthly_prestige_gain_mult = 0.05 + } + county_modifier = { + hostile_raid_time = 0.5 + travel_danger = -20 + } + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_3 + fort_level = good_building_fort_level_tier_2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_wonder +} +########## +# Cluny Abbey +########## +cluny_abbey_01 = { + asset = { + type = pdxmesh + name = "building_special_cluny_abbey_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_cluny_abbey.dds" + next_building = cluny_abbey_02 + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + can_construct = { scope:holder.culture = { has_innovation = innovation_crop_rotation } } + effect_desc = { + desc = unlocks_building_desc + triggered_desc = { + trigger = { has_dlc_feature = royal_court } + desc = university_roco_effect_desc + } + desc = university_effect_desc + } + cost_gold = 1000 + county_holder_character_modifier = { + learning = 1 + monthly_piety_gain_mult = 0.1 + faith_creation_piety_cost_mult = -0.15 + } + county_modifier = { + development_growth_factor = 0.15 + monthly_county_control_growth_factor = 0.1 + } + province_modifier = { + monthly_income = 1.5 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +cluny_abbey_02 = { + asset = { + type = pdxmesh + name = "building_special_cluny_abbey_02_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_cluny_abbey.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + + can_construct = { scope:holder.culture = { has_innovation = innovation_manorialism } } + cost_gold = 1000 + effect_desc = { + desc = unlocks_building_desc + triggered_desc = { + trigger = { has_dlc_feature = royal_court } + desc = university_roco_effect_desc + } + desc = university_effect_desc + } + county_holder_character_modifier = { + learning_per_piety_level = 1 + monthly_piety_gain_mult = 0.2 + faith_creation_piety_cost_mult = -0.25 + } + county_modifier = { + development_growth_factor = 0.25 + monthly_county_control_growth_factor = 0.2 + } + province_modifier = { + monthly_income = 3 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +########## +# Walls of York +########## +york_walls_01 = { + asset = { + type = pdxmesh + name = "building_special_york_walls_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_york_walls.dds" + cost_gold = 1000 + character_modifier = { + owned_legend_spread_mult = 0.15 + } + county_modifier = { + hostile_raid_time = 0.5 + supply_limit_mult = 0.15 + travel_danger = -20 + } + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_2 + fort_level = good_building_fort_level_tier_2 + garrison_size = 0.2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_martial +} +########## +# Great Mosque of Damascus +########## +damascus_mosque_01 = { + asset = { + type = pdxmesh + name = "building_special_damascus_mosque_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_damascus_mosque.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_muslim_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:islam_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + cost_gold = 1000 + character_modifier = { + build_speed = -0.1 + monthly_piety = 0.5 + } + county_modifier = { + tax_mult = 0.2 + development_growth_factor = 0.2 + monthly_county_control_growth_factor = 0.2 + } + province_modifier = { + monthly_income = 2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +########## +# Jokhang +########## +jokhang_01 = { + asset = { + type = pdxmesh + name = "building_special_jokhang_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_jokhang.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { custom_description = { text = buddhas_of_bamian_trigger scope:holder = { religion = { is_in_family = rf_eastern } } } } + cost_gold = 1000 + county_holder_character_modifier = { + monthly_piety_gain_per_dread_add = 0.02 + monthly_piety_gain_per_happy_powerful_vassal_add = 0.1 + monthly_lifestyle_xp_gain_mult = 0.1 + } + county_modifier = { + county_opinion_add = 10 + development_growth = 0.2 + monthly_county_control_growth_add = 0.2 + } + province_modifier = { + monthly_income = 2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +########## +# Wartburg +########## +wartburg_01 = { + asset = { + type = pdxmesh + name = "building_special_wartburg_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_wartburg.dds" + can_construct_potential = { building_requirement_tribal = no } + can_construct = { scope:holder.culture = { has_innovation = innovation_castle_baileys } } + cost_gold = 1000 + character_modifier = { + diplomacy = 1 + prestige_level_impact_mult = 0.5 + } + county_modifier = { + travel_danger = -20 + hostile_raid_time = 0.5 + } + province_modifier = { + fort_level = normal_building_fort_level_tier_3 + stationed_maa_damage_mult = normal_maa_damage_tier_1 + stationed_maa_toughness_mult = normal_maa_toughness_tier_1 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_martial +} +########## +# Beta Giyorgis +########## +beta_giyorgis_01 = { + asset = { + type = pdxmesh + name = "building_special_beta_giyorgis_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_beta_giyorgis.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + can_construct = { scope:holder.culture = { has_innovation = innovation_manorialism } } + cost_gold = 1000 + county_holder_character_modifier = { + piety_level_impact_mult = 0.5 + legitimacy_gain_mult = 0.1 + } + county_modifier = { + development_growth = 0.3 + development_growth_factor = 0.3 + } + province_modifier = { + monthly_income = 2 + defender_holding_advantage = normal_building_advantage_tier_2 + build_speed = -0.1 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +########## +# Holy Wisdom of Novgorod +########## +holy_wisdom_01 = { + asset = { + type = pdxmesh + name = "building_special_holy_wisdom_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_holy_wisdom.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + can_construct = { scope:holder.culture = { has_innovation = innovation_crop_rotation } } + cost_gold = 1000 + character_modifier = { + monthly_piety_gain_per_knight_add = 0.1 + martial_per_piety_level = 1 + } + county_modifier = { + tax_mult = 0.1 + monthly_county_control_growth_factor = 0.1 + } + province_modifier = { + travel_danger = -20 + monthly_income = 2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +########## +# Kano Earthworks +########## +kano_walls_01 = { + asset = { + type = pdxmesh + name = "building_special_kano_walls_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_kano_walls.dds" + cost_gold = 1000 + can_construct = { scope:holder.culture = { has_innovation = innovation_motte } } + character_modifier = { + stewardship = 1 + } + county_modifier = { + hostile_raid_time = 1 + development_growth_factor = 0.2 + development_growth = 0.2 + tax_mult = 0.2 + } + province_modifier = { + defender_holding_advantage = normal_building_advantage_tier_2 + fort_level = good_building_fort_level_tier_1 + garrison_size = 0.2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_martial +} +########## +# Somapura University +########## +somapura_university_01 = { + asset = { + type = pdxmesh + name = "building_special_somapura_university_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_somapura_university.dds" + can_construct_potential = { building_university_requirement = yes building_requirement_tribal = no } + cost_gold = 1000 + effect_desc = { + desc = unlocks_building_desc + triggered_desc = { + trigger = { has_dlc_feature = tours_and_tournaments } + desc = university_toto_effect_desc + } + triggered_desc = { + trigger = { has_dlc_feature = royal_court } + desc = university_roco_effect_desc + } + desc = university_effect_desc + } + county_holder_character_modifier = { + learning_per_piety_level = 1 + monthly_lifestyle_xp_gain_mult = 0.1 + stress_loss_mult = 0.1 + } + county_modifier = { + development_growth_factor = 0.2 + development_growth = 0.2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_learning +} +########## +# Duomo Florence +########## +duomo_florence_01 = { + asset = { + type = pdxmesh + name = "building_special_duomo_florence_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_duomo_florence.dds" + next_building = duomo_florence_02 + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + cost_gold = 1000 + character_modifier = { + monthly_piety_gain_mult = 0.05 + } + county_modifier = { + development_growth_factor = 0.05 + development_growth = 0.05 + } + province_modifier = { + monthly_income = 1 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +duomo_florence_02 = { + asset = { + type = pdxmesh + name = "building_special_duomo_florence_02_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_duomo_florence.dds" + next_building = duomo_florence_03 + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + can_construct = { scope:holder.culture = { has_innovation = innovation_manorialism } } + cost_gold = 1000 + character_modifier = { + stewardship = 1 + monthly_piety_gain_mult = 0.05 + } + county_modifier = { + development_growth_factor = 0.1 + development_growth = 0.1 + } + province_modifier = { + monthly_income = 2 + build_speed = -0.1 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +duomo_florence_03 = { + asset = { + type = pdxmesh + name = "building_special_duomo_florence_03_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_duomo_florence.dds" + next_building = duomo_florence_04 + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + can_construct = { scope:holder.culture = { has_innovation = innovation_guilds } } + cost_gold = 1000 + character_modifier = { + stewardship = 1 + diplomacy = 1 + monthly_piety_gain_mult = 0.1 + republic_government_tax_contribution_mult = 0.05 + } + county_modifier = { + development_growth_factor = 0.2 + development_growth = 0.2 + } + province_modifier = { + monthly_income = 3 + build_speed = -0.2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +duomo_florence_04 = { + asset = { + type = pdxmesh + name = "building_special_duomo_florence_04_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_duomo_florence.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + can_construct = { scope:holder.culture = { has_innovation = innovation_cranes } } + cost_gold = 1000 + character_modifier = { + stewardship = 1 + diplomacy = 1 + learning = 1 + monthly_prestige_gain_mult = 0.2 + monthly_piety_gain_mult = 0.2 + republic_government_tax_contribution_mult = 0.1 + } + county_modifier = { + development_growth_factor = 0.3 + development_growth = 0.3 + } + province_modifier = { + monthly_income = 4 + build_speed = -0.3 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +########## +# Konark Sun Temple +########## +konark_temple_01 = { + asset = { + type = pdxmesh + name = "building_special_konark_temple_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_konark_temple.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { custom_description = { text = buddhas_of_bamian_trigger scope:holder = { religion = { is_in_family = rf_eastern } } } } + can_construct = { scope:holder.culture = { has_innovation = innovation_guilds } } + cost_gold = 1000 + county_holder_character_modifier = { + monthly_piety_gain_per_happy_powerful_vassal_mult = 0.05 + legitimacy_gain_mult = 0.1 + monthly_county_control_growth_factor = 0.05 + } + county_modifier = { + development_growth = 0.2 + development_growth_factor = 0.2 + } + province_modifier = { + monthly_income = 2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +########## +# al-Qarawiyyin University +########## +al_qarawiyyin_university_01 = { + asset = { + type = pdxmesh + name = "building_special_al_qarawiyyin_university_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_al_qarawiyyin_university.dds" + can_construct_potential = { building_university_requirement = yes building_requirement_tribal = no } + cost_gold = 1000 + effect_desc = { + desc = unlocks_building_desc + triggered_desc = { + trigger = { has_dlc_feature = tours_and_tournaments } + desc = university_toto_effect_desc + } + triggered_desc = { + trigger = { has_dlc_feature = royal_court } + desc = university_roco_effect_desc + } + desc = university_effect_desc + } + character_modifier = { + diplomacy_per_piety_level = 1 + monthly_lifestyle_xp_gain_mult = 0.1 + cultural_head_fascination_mult = 0.1 + } + county_modifier = { + development_growth_factor = 0.2 + development_growth = 0.2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_learning +} +########## +# Kairouan basins +########## +kairouan_basins_01 = { + asset = { + type = pdxmesh + name = "building_special_kairouan_basins_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_kairouan_basins.dds" + can_construct_potential = { building_requirement_tribal = no } + cost_gold = 1000 + character_modifier = { + monthly_dynasty_prestige_mult = 0.05 + negate_health_penalty_add = 0.1 + } + county_modifier = { + county_opinion_add = 20 + development_growth_factor = 0.3 + development_growth = 0.3 + } + province_modifier = { + hostile_raid_time = 0.5 + defender_holding_advantage = normal_building_advantage_tier_2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_economic +} +########## +# Ghana Palace +########## +ghana_palace_01 = { + effect_desc = feast_cost_discount_max_desc + asset = { + type = pdxmesh + name = "building_special_ghana_palace_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_ghana_palace.dds" + cost_gold = 1000 + character_modifier = { + monthly_dynasty_prestige_mult = 0.05 + vassal_tax_mult = 0.05 + court_grandeur_baseline_add = 5 + } + county_modifier = { + development_growth_factor = 0.1 + monthly_county_control_growth_factor = 0.1 + } + province_modifier = { + hostile_raid_time = 0.5 + monthly_income = 2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_wonder +} +########## +# Visegrad +########## +visegrad_castle_01 = { + effect_desc = hunting_grounds_desc + asset = { + type = pdxmesh + name = "building_special_visegrad_castle_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_visegrad_castle.dds" + can_construct_potential = { building_requirement_tribal = no } + can_construct = { scope:holder.culture = { has_innovation = innovation_castle_baileys } } + cost_gold = 1000 + character_modifier = { + monthly_dynasty_prestige_mult = 0.05 + monthly_prestige_gain_mult = 0.05 + monthly_diplomacy_lifestyle_xp_gain_mult = 0.1 + } + county_modifier = { + travel_danger = -20 + monthly_county_control_growth_factor = 0.2 + } + province_modifier = { + fort_level = good_building_fort_level_tier_2 + garrison_size = 0.2 + stationed_maa_damage_mult = normal_maa_damage_tier_1 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_martial +} +########## +# Archcollegiate Church of St. Mary and St. Alexius in Tum +########## +wawel_cathedral_01 = { #Collegiate Church of St. Mary and St. Alexius + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_wavel_effect_desc + } + } + asset = { + type = pdxmesh + name = "building_special_wawel_cathedral_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_wawel_cathedral.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + can_construct = { scope:holder.culture = { has_innovation = innovation_crop_rotation } } + cost_gold = 400 + character_modifier = { + #monthly_dynasty_prestige_mult = 0.05 + monthly_piety_from_buildings_mult = 0.05 + clergy_opinion = 2 + } + county_modifier = { + development_growth_factor = 0.05 + development_growth = 0.1 + county_opinion_add = 5 + } + province_modifier = { + monthly_income = 0.5 + fort_level = 2 + stationed_maa_toughness_mult = 0.05 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + next_building = wawel_cathedral_02 + type = special + flag = travel_point_of_interest_religious +} + +wawel_cathedral_02 = { #Archcollegiate Church of St. Mary and St. Alexius + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_wavel_effect_desc + } + } + asset = { + type = pdxmesh + name = "building_special_wawel_cathedral_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_wawel_cathedral.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + can_construct = { scope:holder.culture = { has_innovation = innovation_manorialism } } + cost_gold = 800 + character_modifier = { + monthly_dynasty_prestige_mult = 0.02 + monthly_piety_from_buildings_mult = 0.1 + clergy_opinion = 4 + } + county_modifier = { + development_growth_factor = 0.1 + development_growth = 0.2 + county_opinion_add = 15 + } + province_modifier = { + monthly_income = 1 + fort_level = 4 + stationed_maa_toughness_mult = 0.1 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + next_building = wawel_cathedral_03 + type = special + flag = travel_point_of_interest_religious +} + +wawel_cathedral_03 = { #Cathedral of St. Mary and St. Alexius - althistory upgrade + effect_desc = { + triggered_desc = { + trigger = { has_dlc_feature = legends_of_the_dead } + desc = building_funeral_wavel_effect_desc + } + } + asset = { + type = pdxmesh + name = "building_special_wawel_cathedral_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_wawel_cathedral.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { + custom_description = { + text = holy_site_christian_or_holy_site_trigger + OR = { + scope:holder = { religion = religion:christianity_religion } + custom_description = { text = holy_site_building_trigger barony = { is_holy_site_of = scope:holder.faith } } + } + } + } + can_construct = { scope:holder.culture = { has_innovation = innovation_cranes } } + cost_gold = 1400 + character_modifier = { + monthly_dynasty_prestige_mult = 0.05 + monthly_piety_from_buildings_mult = 0.2 + clergy_opinion = 6 + } + county_modifier = { + development_growth_factor = 0.2 + development_growth = 0.3 + county_opinion_add = 15 + } + province_modifier = { + monthly_income = 2 + fort_level = 8 + stationed_maa_toughness_mult = 0.2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +########## +# Vatapi Caves +########## +vatapi_caves_01 = { + asset = { + type = pdxmesh + name = "building_special_vatapi_caves_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_vatapi_caves.dds" + can_construct_potential = { building_requirement_tribal = no } + is_enabled = { custom_description = { text = buddhas_of_bamian_trigger scope:holder = { religion = { is_in_family = rf_eastern } } } } + cost_gold = 1000 + character_modifier = { + monthly_piety = 2 + stress_loss_mult = 0.2 + monthly_lifestyle_xp_gain_mult = 0.1 + rf_eastern_opinion = 5 + } + province_modifier = { + monthly_income = 2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_religious +} +########## +# Golden fort of Jaisalmer +########## +jaisalmer_fort_01 = { + asset = { + type = pdxmesh + name = "building_special_jaisalmer_fort_01_mesh" + requires_dlc_flag = medieval_monuments + } + construction_time = very_slow_construction_time + type_icon = "icon_structure_jaisalmer_fort.dds" + can_construct_potential = { building_requirement_tribal = no } + can_construct = { scope:holder.culture = { has_innovation = innovation_hoardings } } + cost_gold = 1000 + county_holder_character_modifier = { + parochial_opinion = 5 + desert_advantage = 6 + desert_development_growth_factor = 0.2 + } + county_modifier = { + travel_danger = -20 + monthly_county_control_growth_factor = 0.2 + } + province_modifier = { + fort_level = good_building_fort_level_tier_2 + defender_holding_advantage = 4 + garrison_size = 0.2 + } + ai_value = { + base = 100 + modifier = { # Fill all building slots before going for special buildings + factor = 0 + free_building_slots > 0 + } + } + type = special + flag = travel_point_of_interest_martial +} diff --git a/common/character_interactions/00_alliance.txt b/common/character_interactions/00_alliance.txt index e6d9f920..46e3f230 100644 --- a/common/character_interactions/00_alliance.txt +++ b/common/character_interactions/00_alliance.txt @@ -20,6 +20,12 @@ } scope:recipient.current_military_strength >= 100 } + trigger_if = { + limit = { + liege = scope:recipient # The recipient is actor's liege + } + subject_contract_has_flag = vassal_contract_liege_forced_war_override + } } scope:recipient = { OR = { @@ -30,6 +36,13 @@ any_character_war = { diarch_callable_in_internal_war_trigger = yes } } } + scope:actor = { + is_vassal_of = prev + subject_contract_has_flag = vassal_contract_liege_forced_war_override + } + scope:actor = { + is_tributary_of = prev + } } } scope:actor = { #If you can call them as a House Member then do that @@ -52,6 +65,17 @@ } scope:actor = { + trigger_if = { + limit = { # if you're invoking your suzerain's defensive guarantee, it has to be for a defensive war + NOT = { is_allied_to = scope:recipient } + suzerain = scope:recipient + subject_contract_has_flag = tributary_contract_suzerain_guarantee_override + } + scope:target = { + primary_defender = scope:actor + } + } + trigger_if = { limit = { scope:target = { @@ -85,7 +109,6 @@ } } - joiner_not_already_in_another_war_with_any_target_war_participants_trigger = { WARRIOR = scope:actor JOINER = scope:recipient @@ -174,6 +197,48 @@ } } } + + # You cannot call a suzerain against their own tributary + trigger_if = { + limit = { + scope:target.casus_belli.primary_defender = scope:actor + scope:target.casus_belli.primary_attacker = { is_tributary_of_suzerain_or_above = scope:recipient } + } + NOT = { + scope:target.casus_belli.primary_attacker = { is_tributary_of_suzerain_or_above = scope:recipient } + } + } + trigger_else_if = { + limit = { + scope:target.casus_belli.primary_attacker = scope:actor + scope:target.casus_belli.primary_defender = { is_tributary_of_suzerain_or_above = scope:recipient } + } + NOT = { + scope:target.casus_belli.primary_defender = { is_tributary_of_suzerain_or_above = scope:recipient } + } + } + trigger_else = {} + + # You cannot call a tributary against their suzerain + trigger_if = { + limit = { + scope:target.casus_belli.primary_defender = scope:actor + scope:recipient = { is_tributary_of_suzerain_or_above = scope:target.casus_belli.primary_attacker } + } + NOT = { + scope:recipient = { is_tributary_of_suzerain_or_above = scope:target.casus_belli.primary_attacker } + } + } + trigger_else_if = { + limit = { + scope:target.casus_belli.primary_attacker = scope:actor + scope:recipient = { is_tributary_of_suzerain_or_above = scope:target.casus_belli.primary_defender } + } + NOT = { + scope:recipient = { is_tributary_of_suzerain_or_above = scope:target.casus_belli.primary_defender } + } + } + trigger_else = {} } on_auto_accept = { @@ -282,6 +347,7 @@ scope:recipient = { add_prestige_experience = major_prestige_loss } + } else = { scope:actor = { @@ -294,6 +360,59 @@ add_prestige_experience = massive_prestige_loss } } + if = { + limit = { + scope:actor = { + has_relation_blood_brother = scope:recipient + } + } + scope:recipient = { + add_piety_experience = massive_piety_loss + add_character_modifier = { + modifier = broke_blood_brotherhood_modifier + desc = broke_blood_brotherhood_modifier_acceptance_tt + years = 25 + } + remove_relation_blood_brother = scope:actor + } + scope:actor = { + set_relation_rival = { + target = scope:recipient + reason = rival_blood_brother_refused_call_reason + } + } + } + # Nomad Vassals and Tributaries stop being Obedient if they have the Liege War Support / Suzerain Defensive Guarantee contract right + if = { + limit = { + scope:recipient = scope:actor.obedience_target + scope:actor = { + OR = { + subject_contract_has_flag = vassal_contract_liege_forced_war_override + subject_contract_has_flag = tributary_contract_suzerain_guarantee_override + } + } + } + scope:actor = { + set_variable = { + name = not_obedient_declined_call + value = scope:recipient + years = 5 + } + } + } + if = { + limit = { + scope:recipient = scope:actor.suzerain + is_defender = scope:actor + scope:actor = { + subject_contract_has_flag = tributary_contract_suzerain_guarantee_override + } + } + scope:actor = { + end_tributary = yes #TODO_CD_MPO some sort of message here + } + } hidden_effect = { if = { limit = { @@ -425,6 +544,28 @@ } desc = WONT_FIGHT_SPOUSE_REASON } + + modifier = { # Refuse call against Suzerain if Obedient + add = -1000 + trigger_if = { + limit = { + exists = scope:recipient.suzerain + trigger_if = { + limit = { scope:target.casus_belli.primary_defender = scope:actor } + scope:recipient.suzerain = scope:target.casus_belli.primary_attacker + } + trigger_else = { + scope:recipient.suzerain = scope:target.casus_belli.primary_defender + } + scope:recipient = { + exists = obedience_target + is_obedient = yes + } + } + } + trigger_else = { always = no } + desc = WONT_FIGHT_OBEDIENT_REASON + } opinion_modifier = { # Opinion Factor who = scope:recipient @@ -764,6 +905,21 @@ } desc = WONT_FIGHT_SOULMATE } + modifier = { # Reluctant to join tributaries + add = -200 + scope:actor = { + is_tributary_of = scope:recipient + } + scope:recipient = { + NOR = { + has_relation_lover = scope:actor + has_relation_friend = scope:actor + is_allied_to = scope:actor + subject_contract_has_flag = tributary_contract_suzerain_guarantee_override + } + } + desc = WONT_FIGHT_MEANINGLESS_REASON + } modifier = { # Refuse call for hostages' safety any_home_court_hostage = { warden = { @@ -900,6 +1056,11 @@ negotiate_alliance_interaction = { OR = { is_any_family_relation_or_spouse_trigger = { CHARACTER = scope:recipient } hostage_oath_of_friendship_trigger = yes + #Parents/spouse were blood brothers + has_opinion_modifier = { + modifier = blood_brother_close_family_opinion + target = scope:recipient + } } } } @@ -952,7 +1113,13 @@ negotiate_alliance_interaction = { scope:actor = { hostage_oath_of_friendship_trigger = yes } - + #Parents/spouse were blood brothers + scope:actor = { + has_opinion_modifier = { + modifier = blood_brother_close_family_opinion + target = scope:recipient + } + } custom_description = { text = rulers_family_is_married_to_other_ruler_trigger @@ -1046,11 +1213,11 @@ negotiate_alliance_interaction = { send_option = { is_shown = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative } scope:recipient = { top_liege = scope:actor.top_liege - has_government = administrative_government + government_has_flag = government_is_administrative } } is_valid = { @@ -2113,17 +2280,22 @@ perk_alliance_interaction = { is_shown = { scope:recipient = { - NOT = { this = scope:actor } - NOT = { is_allied_to = scope:actor } - NOT = { target_is_vassal_or_below = scope:actor } # Can only sign with external rulers/peer vassals, though the alliance is preserved if they somehow become your vassals - NOT = { target_is_liege_or_above = scope:actor } + NOR = { + this = scope:actor + is_allied_to = scope:actor + target_is_vassal_or_below = scope:actor # Can only sign with external rulers/peer vassals, though the alliance is preserved if they somehow become your vassals + target_is_liege_or_above = scope:actor + government_has_flag = government_is_herder + } is_ruler = yes primary_title.tier > tier_barony } scope:actor = { has_perk = defensive_negotiations_perk is_landless_adventurer = no - NOT = { # This interaction is harder to push through than Negotiate Alliance, and does the same thing, so don't show both + NOR = { + government_has_flag = government_is_herder + # This interaction is harder to push through than Negotiate Alliance, and does the same thing, so don't show both is_character_interaction_shown = { recipient = scope:recipient interaction = negotiate_alliance_interaction @@ -2214,11 +2386,11 @@ perk_alliance_interaction = { send_option = { is_shown = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative } scope:recipient = { top_liege = scope:actor.top_liege - has_government = administrative_government + government_has_flag = government_is_administrative } } is_valid = { @@ -2960,7 +3132,7 @@ join_war_interaction = { is_valid_showing_failures_only = { - # recipient is not in (any) war against your liege(s) + # recipient is not in (any) war against your liege(s) or suzerain(s) trigger_if = { limit = { exists = scope:actor.liege } custom_description = { @@ -2993,8 +3165,7 @@ join_war_interaction = { } } } - - # recipient is ally or defending against a holy war + # if the target is neither a vassal-or-below, nor a liege-or-above, the recipient must either be an ally or defending against a qualifying holy war - unless the character is an adventurer in which case other rules apply trigger_else_if = { limit = { scope:actor = { @@ -3076,6 +3247,54 @@ join_war_interaction = { } # Deliberately blank; we've passed the trigger and making a desc out of this doesn't make sense } + + # if the actor and recipient is in the same confederation, they can always come to each others' aid + trigger_else_if = { + limit = { + exists = scope:recipient.confederation + scope:actor = { is_member_of_confederation = scope:recipient.confederation } + } + scope:actor = { is_member_of_confederation = scope:recipient.confederation } # for localization only + } + + # suzerains can always join their tributaries' defensive wars + trigger_else_if = { + limit = { + scope:recipient = { + is_tributary_of_suzerain_or_above = scope:actor + } + } + custom_tooltip = { + text = join_war_interaction_recipient_tributary_no_defensive_war + NOT = { + scope:recipient = { + any_character_war = { + primary_defender = scope:recipient + } + } + } + } + } + # tributaries can always offer to join their direct suzerains' defensive wars + trigger_else_if = { + limit = { + scope:actor = { + is_tributary_of = scope:recipient + } + } + custom_tooltip = { + text = join_war_interaction_recipient_tributary_no_defensive_war + NOT = { + scope:recipient = { + any_character_war = { + primary_defender = scope:recipient + } + } + } + } + } + + # if we haven't already passed any of the qualified conditions above, then we need to be allies trigger_else = { custom_description = { text = join_war_interaction_recipient_not_ally @@ -3123,20 +3342,45 @@ join_war_interaction = { } can_be_picked = { - exists = scope:target - scope:target = { + scope:target ?= { # recipient is war leader is_war_leader = scope:recipient + + # special exception for tributaries and suzerains to fight for one another + trigger_if = { + limit = { + OR = { + scope:actor = { + is_tributary_of_suzerain_or_above = scope:recipient + } + scope:recipient = { + is_tributary_of = scope:actor + } + } + } + # if this is directed at a tributary, make sure they're the primary defender + trigger_if = { + limit = { + scope:recipient = { is_tributary_of = scope:actor } + } + custom_tooltip = { + text = join_war_interaction_recipient_tributary_not_primary_defender + primary_defender = scope:recipient + } + } + trigger_else = { always = yes } + } #allow laamp_join_war_contract to bypass the requirements - trigger_if = { + trigger_else_if = { limit = { scope:actor = { is_landless_adventurer = yes } } } + # if holy war, recipient is defender of same faith # and not too far away trigger_else_if = { @@ -3207,6 +3451,16 @@ join_war_interaction = { } always = yes } + #Confederation members can choose to join each others' offensive wars + trigger_else_if = { + limit = { + scope:actor = { NOT = { is_allied_to = scope:recipient } } + exists = scope:recipient.confederation + } + scope:actor = { + is_member_of_confederation = scope:recipient.confederation + } + } # ...otherwise, recipient must be an ally... trigger_else_if = { limit = { diff --git a/common/character_interactions/00_artifact_interactions.txt b/common/character_interactions/00_artifact_interactions.txt index 24247e00..7b358c8e 100644 --- a/common/character_interactions/00_artifact_interactions.txt +++ b/common/character_interactions/00_artifact_interactions.txt @@ -3794,7 +3794,6 @@ buy_artifact_claim = { ai_targets = { # Only want AI to target neighbors ai_recipients = neighboring_rulers - ai_recipients = nearby_domicile_owners } ai_frequency = 30 diff --git a/common/character_interactions/00_ce1_interactions.txt b/common/character_interactions/00_ce1_interactions.txt index 82085c27..c6f2d488 100644 --- a/common/character_interactions/00_ce1_interactions.txt +++ b/common/character_interactions/00_ce1_interactions.txt @@ -19,6 +19,7 @@ ce1_ask_to_promote_legend_interaction = { is_landed = yes age >= 12 is_physically_able = yes + NOT = { government_has_flag = government_is_herder } } } @@ -256,18 +257,14 @@ ce1_ask_to_promote_legend_interaction = { right_icon = scope:recipient if = { - limit = { always = scope:hook } - scope:actor = { - use_hook = scope:recipient - } + limit = { scope:hook = yes } + use_hook = scope:recipient } if = { - limit = { always = scope:gold_cost } - scope:actor = { - pay_short_term_gold = { - target = scope:recipient - gold = medium_gold_value - } + limit = { scope:gold_cost = yes } + pay_short_term_gold = { + target = scope:recipient + gold = medium_gold_value } promoted_legend = { # To prevent gold exploits add_to_variable_list = { diff --git a/common/character_interactions/00_character_interactions.txt b/common/character_interactions/00_character_interactions.txt index a54a10db..fa4a3e0c 100644 --- a/common/character_interactions/00_character_interactions.txt +++ b/common/character_interactions/00_character_interactions.txt @@ -21,15 +21,35 @@ offer_vassalization_interaction = { scope:recipient = { NOT = { this = scope:actor } is_playable_character = yes - is_independent_ruler = yes + OR = { + AND = { + is_independent_ruler = yes + is_tributary = no + } + is_tributary_of_suzerain_or_above = scope:actor + } highest_held_title_tier < scope:actor.highest_held_title_tier - NOT = { government_has_flag = cannot_be_vassal_or_liege } + NOR = { + government_has_flag = cannot_be_vassal_or_liege + government_has_flag = government_is_herder + } + } + # Temujin cannot make Jamukha his subject once he leaves him + NOT = { + scope:actor = { + has_variable = had_mpo_temujin_flavor_0010 + var:had_mpo_temujin_flavor_0010 ?= scope:recipient + } } } is_valid_showing_failures_only = { + scope:actor = { + is_confederation_member = no + } scope:recipient = { is_at_war = no + is_confederation_member = no custom_description = { text = was_recently_granted_independence @@ -133,13 +153,25 @@ offer_vassalization_interaction = { add = 20 } + # OBEDIENCE + modifier = { + desc = obedient_interaction_reason + trigger = { + is_obedient_to = scope:actor + } + add = 20 + } modifier = { # Cultural Acceptance add = offer_vassalage_acceptance_value desc = cultural_acceptance_interaction_reason trigger = { scope:actor = { - NOT = { has_same_culture_as = scope:recipient } + NOR = { + has_same_culture_as = scope:recipient + government_has_flag = government_is_nomadic # Nomads do not care about Culture + has_trait = nomadic_philosophy + } culture = { cultural_acceptance = { target = scope:recipient.culture value <= 90 } } @@ -151,6 +183,12 @@ offer_vassalization_interaction = { modifier = { #Different faith, no pluralism. desc = offer_vassalization_interaction_aibehavior_differentfaith_tt trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } scope:recipient = { NOR = { #Of two different faiths AND the potential vassal's faith is not pluralistic. faith = scope:actor.faith @@ -188,6 +226,12 @@ offer_vassalization_interaction = { modifier = { #Different faith, pluralism. desc = offer_vassalization_interaction_aibehavior_differentfaith_tt trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } scope:recipient = { NOT = { faith = scope:actor.faith @@ -228,6 +272,12 @@ offer_vassalization_interaction = { modifier = { #Different faith, both have pluralism. desc = offer_vassalization_interaction_aibehavior_differentfaith_tt trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } scope:recipient = { NOT = { faith = scope:actor.faith @@ -273,7 +323,7 @@ offer_vassalization_interaction = { limit = { scope:recipient = { OR = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic government_has_flag = government_is_theocracy } } @@ -350,6 +400,42 @@ offer_vassalization_interaction = { } add = -20 } + modifier = { # I am Nomadic and you are Nomadic + desc = interaction_is_nomadic + trigger = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + scope:actor = { + government_has_flag = government_is_nomadic + } + } + add = -50 + } + modifier = { # I am Nomadic and you are not + desc = interaction_nomadic_vs_nonnomadic + trigger = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + scope:actor = { + NOT = { government_has_flag = government_is_nomadic } + } + } + add = -75 + } + modifier = { # You are Nomadic and I am not + desc = interaction_nonnomadic_vs_nomadic + trigger = { + scope:actor = { + government_has_flag = government_is_nomadic + } + scope:recipient = { + NOT = { government_has_flag = government_is_nomadic } + } + } + add = -75 + } modifier = { # Isolationist tradition desc = isolationist_reason trigger = { @@ -621,17 +707,17 @@ offer_vassalization_interaction = { modifier = { #Illegitimacy modifier. desc = offer_vassalization_interaction_aibehavior_illegitimate_tt trigger = { - OR = { - AND = { - scope:actor = { + scope:actor = { + OR = { + AND = { has_trait = bastard + scope:recipient = { + faith = { NOT = { has_doctrine = doctrine_bastardry_none } } + } } - scope:recipient = { - faith = { NOT = { has_doctrine = doctrine_bastardry_none } } - } + has_trait = denounced + has_trait = disinherited } - has_trait = denounced - has_trait = disinherited } } add = -10 @@ -960,6 +1046,19 @@ offer_vassalization_interaction = { add = -50 } + modifier = { + trigger = { + scope:actor = { + has_variable = severed_head_vassalization + var:severed_head_vassalization = { + this = scope:recipient + } + } + } + add = 200 + desc = COWED_BY_SEVERED_HEAD_MODIFIER + } + #ALL these modifiers are also used in impress_intent_vassalization_acceptance_value, keep them synced } @@ -1090,17 +1189,12 @@ offer_vassalization_interaction = { # AI prefers to receive higher obligations from their vassals when possible. modifier = { - add = 2 - scope:low_obligations = yes - } - - modifier = { - add = 3 + factor = 3 scope:normal_obligations = yes } modifier = { - add = 4 + factor = 4 scope:high_obligations = yes } @@ -1142,6 +1236,7 @@ offer_fealty_interaction = { is_landed = yes is_independent_ruler = yes # You have to be independent - This check exists to prevent a lot of edge-cases where you can change liege NOT = { government_has_flag = cannot_be_vassal_or_liege } + is_confederation_member = no } } @@ -1234,7 +1329,9 @@ offer_fealty_interaction = { modifier = { # I am a King! desc = offer_fealty_interaction_aibehavior_amkingtier_tt trigger = { - scope:actor = { highest_held_title_tier = tier_kingdom } + scope:actor = { + highest_held_title_tier >= tier_kingdom + } } add = -10 } @@ -1415,6 +1512,32 @@ offer_fealty_interaction = { } } } + #Confederation wants same-culture rulers + modifier = { + add = 100 + desc = CONFEDERATION_CULTURE_REASON + scope:recipient = { + is_confederation_member = yes + culture = { + this = scope:actor.culture + } + } + } + + #Greatest of Khans and Mongol Emperor would prefer submission with tribute + modifier = { + add = -150 + desc = GOK_PREFER_SUBMISSION + scope:recipient = { + highest_held_title_tier >= tier_empire + any_owned_story = { + OR = { + story_type = story_mongol_invasion + story_type = story_greatest_of_khans + } + } + } + } } # Low starting obligations @@ -1509,6 +1632,60 @@ offer_fealty_interaction = { custom_tooltip = will_change_from_administrative_tt custom_tooltip = will_lose_administrative_government_type_tt } + if = { + limit = { + scope:recipient = { + is_confederation_member = yes + } + } + if = { + limit = { + government_has_flag = government_is_nomadic + } + add_character_modifier = { + modifier = mpo_confederation_member_modifier + years = 5 + } + every_vassal_or_below = { + limit = { + highest_held_title_tier >= tier_county + government_has_flag = government_is_nomadic + } + add_character_modifier = { + modifier = mpo_confederation_member_modifier + years = 5 + } + } + } + + add_character_flag = { + flag = new_confederate + years = 3 + } + every_vassal_or_below = { + limit = { + highest_held_title_tier >= tier_county + } + add_character_flag = { + flag = new_confederate + years = 3 + } + } + } + + # If you have a suzerain, they will get a lower opinion of you for not paying tribute anymore + suzerain ?= { + if = { + limit = { + this != scope:actor + this != scope:recipient + } + add_opinion = { + modifier = tributary_ceased_payments_opinion + target = scope:actor + } + } + } } scope:recipient = { if = { @@ -1538,6 +1715,9 @@ offer_fealty_interaction = { } } + on_intermediary_accept = { + } + on_decline = { scope:actor = { trigger_event = char_interaction.0011 @@ -1776,6 +1956,9 @@ grant_independence_interaction = { desc = grant_independence_interaction_desc is_shown = { + scope:actor = { + is_confederation_member = no + } scope:recipient = { is_vassal_of = scope:actor } diff --git a/common/character_interactions/00_choose_favorite_interaction.txt b/common/character_interactions/00_choose_favorite_interaction.txt index 19434676..cd17f42a 100644 --- a/common/character_interactions/00_choose_favorite_interaction.txt +++ b/common/character_interactions/00_choose_favorite_interaction.txt @@ -49,7 +49,7 @@ choose_favorite_interaction = { custom_tooltip = { text = no_republic_or_theocracy_tt NOR = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic government_has_flag = government_is_theocracy } } diff --git a/common/character_interactions/00_court_amenities_interactions.txt b/common/character_interactions/00_court_amenities_interactions.txt index 1371d9d1..db51e99c 100644 --- a/common/character_interactions/00_court_amenities_interactions.txt +++ b/common/character_interactions/00_court_amenities_interactions.txt @@ -6,6 +6,7 @@ sumptuary_law_debate_interaction = { interface_priority = 15 desc = sumptuary_law_debate_interaction_desc icon = weaver_inspiration + common_interaction = no is_shown = { scope:actor = { @@ -15,6 +16,10 @@ sumptuary_law_debate_interaction = { type = court_fashion value <= 2 } + NOR = { + has_court_type = court_tribal + has_court_type = court_nomadic + } } NOT = { scope:actor = scope:recipient } scope:recipient = { diff --git a/common/character_interactions/00_courtier_and_guest_interactions.txt b/common/character_interactions/00_courtier_and_guest_interactions.txt index cbd902ab..49a1ec40 100644 --- a/common/character_interactions/00_courtier_and_guest_interactions.txt +++ b/common/character_interactions/00_courtier_and_guest_interactions.txt @@ -163,6 +163,7 @@ count <= 30 } ai_should_focus_on_building_in_their_capital = no + NOT = { government_has_flag = government_is_nomadic } } ai_will_do = { @@ -407,6 +408,7 @@ kick_from_court_interaction = { is_valid_showing_failures_only = { scope:recipient = { kick_from_court_validity_trigger = yes + NOT = { is_imprisoned_by = scope:actor } custom_description = { text = "kick_from_court_interaction_travelling_family_invalid" @@ -605,6 +607,17 @@ invite_to_court_interaction = { RECRUITER = scope:actor RECRUITEE = scope:recipient } + custom_tooltip = { + scope:recipient = { + NAND = { + has_variable = nomad_defector_var + var:nomad_defector_var = { + this = scope:actor + } + } + } + text = nomad_defected_invite_desc + } } #Pay som gold to persuade a wandering character to come to your court @@ -1144,7 +1157,7 @@ invite_to_court_interaction = { scope:recipient = { is_eunuch_trigger = yes liege = { - has_government = administrative_government + government_has_flag = government_is_administrative primary_title.tier = tier_empire culture = { has_cultural_parameter = can_appoint_chief_eunuch } } diff --git a/common/character_interactions/00_debug_interactions.txt b/common/character_interactions/00_debug_interactions.txt index 502f55b5..c196ed4c 100644 --- a/common/character_interactions/00_debug_interactions.txt +++ b/common/character_interactions/00_debug_interactions.txt @@ -114,6 +114,7 @@ debug_give_animal_interaction = { any_owned_story = { story_type = story_cycle_pet_cat } any_owned_story = { story_type = story_cycle_pet_dog } any_owned_story = { story_type = story_cycle_martial_lifestyle_warhorse } + has_eagle_trigger = yes } } } @@ -148,6 +149,16 @@ debug_give_animal_interaction = { localization = horse_story_modifier } + send_option = { + is_valid = { + NOT = { + scope:recipient = { has_eagle_trigger = yes } + } + } + flag = story_cycle_pet_eagle + localization = story_cycle_pet_eagle + } + send_options_exclusive = yes on_accept = { @@ -163,6 +174,9 @@ debug_give_animal_interaction = { scope:story_cycle_martial_lifestyle_warhorse = { start_warhorse_story_cycle_effect = yes } + scope:story_cycle_pet_eagle = { + start_eagle_story_cycle_effect = yes + } } } } @@ -749,6 +763,15 @@ set_relation_debug = { flag = grudge_on_me localization = set_relation_debug_grudge_on_me } + send_option = { + is_valid = { + scope:recipient = { + NOT = { has_relation_blood_brother = scope:actor } + } + } + flag = blood_brother + localization = set_relation_debug_blood_brother + } # REMOVE send_option = { is_shown = { @@ -867,6 +890,13 @@ set_relation_debug = { flag = remove_grudge_on_me localization = remove_relation_debug_grudge_on_me } + send_option = { + is_shown = { + scope:recipient = { has_relation_blood_brother = scope:actor } + } + flag = remove_blood_brother + localization = remove_relation_debug_blood_brother + } on_accept = { scope:recipient = { @@ -921,6 +951,7 @@ set_relation_debug = { } } scope:grudge_on_me = { set_relation_grudge = scope:actor } + scope:blood_brother = { set_relation_blood_brother = scope:actor } # REMOVE scope:remove_potential_friend = { remove_relation_potential_friend = scope:actor } scope:remove_potential_rival = { remove_relation_potential_rival = scope:actor } @@ -959,6 +990,7 @@ set_relation_debug = { scope:actor = { remove_relation_grudge = scope:recipient } } scope:remove_grudge_on_me = { remove_relation_grudge = scope:actor } + scope:remove_blood_brother = { remove_relation_blood_brother = scope:actor } } } } @@ -3416,7 +3448,7 @@ destroy_title_interaction = { use_diplomatic_range = no ignores_pending_interaction_block = yes icon = antagonistic - + is_shown = { debug_only = yes } @@ -3454,9 +3486,185 @@ destroy_title_interaction = { } } } - } + } } auto_accept = yes } +debug_change_the_great_steppe = { + category = interaction_debug_mpo + use_diplomatic_range = no + ignores_pending_interaction_block = yes + common_interaction = yes + icon = travel_mixed + + interface_priority = -1 + auto_accept = yes + + is_shown = { + debug_only = yes + scope:actor = { + government_has_flag = government_is_nomadic + } + } + send_option = { + flag = grazing + localization = debug_change_steppe_grazing + } + send_option = { + flag = drought + localization = debug_change_steppe_drought + } + send_option = { + flag = white_zud + localization = debug_change_steppe_white_zud + } + send_option = { + flag = cold_zud + localization = debug_change_steppe_cold_zud + } + send_option = { + flag = summer + localization = debug_change_steppe_everlasting_summer + } + send_option = { + flag = blessing + localization = debug_change_steppe_blessing + } + send_option = { + flag = havsarsan + localization = debug_change_steppe_havsarsan + } + on_accept = { + switch = { + trigger = yes + scope:grazing = { + if = { + limit = { + NOT = { exists = situation:the_great_steppe } + } + start_situation = { + type = the_great_steppe + start_phase = situation_steppe_abundant_grazing_season + } + } + else = { + situation:the_great_steppe = { + every_situation_sub_region = { + change_phase = { phase = situation_steppe_abundant_grazing_season } + } + } + } + } + scope:drought = { + if = { + limit = { + NOT = { exists = situation:the_great_steppe } + } + start_situation = { + type = the_great_steppe + start_phase = situation_steppe_severe_drought_season + } + } + else = { + situation:the_great_steppe = { + every_situation_sub_region = { + change_phase = { phase = situation_steppe_severe_drought_season } + } + } + } + } + scope:white_zud = { + if = { + limit = { + NOT = { exists = situation:the_great_steppe } + } + start_situation = { + type = the_great_steppe + start_phase = situation_steppe_white_zud_season + } + } + else = { + situation:the_great_steppe = { + every_situation_sub_region = { + change_phase = { phase = situation_steppe_white_zud_season } + } + } + } + } + scope:cold_zud = { + if = { + limit = { + NOT = { exists = situation:the_great_steppe } + } + start_situation = { + type = the_great_steppe + start_phase = situation_steppe_cold_zud_season + } + } + else = { + situation:the_great_steppe = { + every_situation_sub_region = { + change_phase = { phase = situation_steppe_cold_zud_season } + } + } + } + } + scope:summer = { + if = { + limit = { + NOT = { exists = situation:the_great_steppe } + } + start_situation = { + type = the_great_steppe + start_phase = situation_steppe_warm_nights_season + } + } + else = { + situation:the_great_steppe = { + every_situation_sub_region = { + change_phase = { phase = situation_steppe_warm_nights_season } + } + } + } + } + scope:blessing = { + if = { + limit = { + NOT = { exists = situation:the_great_steppe } + } + start_situation = { + type = the_great_steppe + start_phase = situation_steppe_sky_blessing_season + } + } + else = { + situation:the_great_steppe = { + every_situation_sub_region = { + change_phase = { phase = situation_steppe_sky_blessing_season } + } + } + } + } + scope:havsarsan = { + if = { + limit = { + NOT = { exists = situation:the_great_steppe } + } + start_situation = { + type = the_great_steppe + start_phase = situation_steppe_havsarsan_zud_season + } + } + else = { + situation:the_great_steppe = { + every_situation_sub_region = { + change_phase = { phase = situation_steppe_havsarsan_zud_season } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/character_interactions/00_diarch_interactions.txt b/common/character_interactions/00_diarch_interactions.txt index 85ec85bf..29e03377 100644 --- a/common/character_interactions/00_diarch_interactions.txt +++ b/common/character_interactions/00_diarch_interactions.txt @@ -2214,7 +2214,7 @@ diarch_subsidise_crown_authority_interaction = { # If the liege is administrative, they have to be independent. trigger_if = { - limit = { has_government = administrative_government } + limit = { government_has_flag = government_is_administrative } is_independent_ruler = yes } } @@ -3252,9 +3252,20 @@ diarch_syphon_treasury_interaction = { # Inform scope:actor what type of embezzlement they'll be pursuing. ## Very high stewardship characters syphon development growth from a few counties. if = { - limit = { stewardship >= syphon_treasury_stewardship_very_high } + limit = { + stewardship >= syphon_treasury_stewardship_very_high + NOT = { government_has_flag = government_is_nomadic } + } custom_tooltip = diarch_syphon_treasury_interaction.tt.success.syphon_development_growth } + ## Alternatively, herd for nomadic rulers + else_if = { + limit = { + stewardship >= syphon_treasury_stewardship_very_high + government_has_flag = government_is_nomadic + } + custom_tooltip = diarch_syphon_treasury_interaction.tt.success.syphon_herd + } ## High stewardship characters syphon some control from various counties. else_if = { limit = { stewardship >= syphon_treasury_stewardship_high } @@ -3337,6 +3348,38 @@ diarch_syphon_treasury_interaction = { diarch_syphon_treasury_interaction_syphon_development_growth_effect = { LOSS = minor_development_progress_loss } } } + # Alternatively, for nomadic rulers, we steal some herd + else_if = { + limit = { scope:actor.stewardship >= syphon_treasury_stewardship_very_high government_has_flag = government_is_nomadic } + # Gold transfer was... + ## Very high. + if = { + limit = { always = scope:diarch_syphon_treasury_sum_huge } + scope:recipient = { + domicile ?= { change_herd = monumental_herd_loss } + } + } + ## High. + else_if = { + limit = { always = scope:diarch_syphon_treasury_sum_large } + scope:recipient = { + domicile ?= { change_herd = massive_herd_loss } + } + } + ## Medium. + else_if = { + limit = { always = scope:diarch_syphon_treasury_sum_medium } + scope:recipient = { + domicile ?= { change_herd = major_herd_loss } + } + } + ## Low. + else = { + scope:recipient = { + domicile ?= { change_herd = medium_herd_loss } + } + } + } # High stewardship characters syphon some control from various counties. else_if = { limit = { scope:actor.stewardship >= syphon_treasury_stewardship_high } @@ -6156,11 +6199,11 @@ swing_scales_currency_interaction = { OR = { AND = { scope:recipient.liege ?= scope:actor - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } } AND = { scope:actor.liege ?= scope:recipient - scope:recipient = { has_government = administrative_government } + scope:recipient = { government_has_flag = government_is_administrative } } } } @@ -6796,11 +6839,11 @@ diarch_swing_scales_currency_interaction = { OR = { AND = { scope:recipient.liege ?= scope:actor - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } } AND = { scope:actor.liege ?= scope:recipient - scope:recipient = { has_government = administrative_government } + scope:recipient = { government_has_flag = government_is_administrative } } } } @@ -7199,6 +7242,7 @@ liege_dismiss_temporary_regency_interaction = { type = event_toast_effect_neutral title = liege_dismiss_temporary_regency_interaction.tt.recipient_notification left_icon = scope:actor + right_icon = scope:recipient # End the diarchy. end_diarchy = yes scope:recipient = { @@ -7299,6 +7343,7 @@ liege_dismiss_entrenched_regency_interaction = { scope:diarchy_ending_gift_dynasty_prestige = yes scope:diarchy_ending_gift_piety = yes scope:diarchy_ending_gift_cash = yes + scope:diarchy_ending_gift_herd = yes } } } @@ -7376,6 +7421,16 @@ liege_dismiss_entrenched_regency_interaction = { flag = diarchy_ending_gift_cash current_description = diarchy_ending_gift_cash_desc } + ## Horse. + send_option = { + flag = diarchy_ending_gift_herd + current_description = diarchy_ending_gift_herd_desc + is_shown = { + # Can only pay herd if actor has herd to pay and recipient accepts herd as a currency + scope:actor = { government_has_flag = government_is_nomadic } + scope:recipient = { government_has_flag = government_is_nomadic } + } + } on_send = { scope:actor = { @@ -7540,6 +7595,38 @@ liege_dismiss_entrenched_regency_interaction = { } } } + # Herd + if = { + limit = { scope:diarchy_ending_gift_herd = yes } + # Transfer the cash. + scope:actor = { + #gold = major_gold_value + pay_herd = { + target = scope:recipient + value = domicile.ten_percent_herd_value + } + } + # Plus they're happy. + if = { + limit = { is_ai = yes } + # More so if they're greedy, 'cause greedy likes money i mean horses. + if = { + limit = { has_trait = greedy } + add_opinion = { + target = scope:actor + modifier = pleased_opinion + opinion = 30 + } + } + else = { + add_opinion = { + target = scope:actor + modifier = pleased_opinion + opinion = 15 + } + } + } + } } # Object explorer logging. @@ -7603,6 +7690,16 @@ liege_dismiss_entrenched_regency_interaction = { diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_cash_accept_recipient_list } } } + else_if = { + limit = { always = scope:diarchy_ending_gift_herd } + scope:actor = { + diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_herd_accept } + diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_herd_accept_actor_list } + } + scope:recipient = { + diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_herd_accept_recipient_list } + } + } } on_decline = { @@ -7693,6 +7790,16 @@ liege_dismiss_entrenched_regency_interaction = { diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_cash_decline_recipient_list } } } + else_if = { + limit = { always = scope:diarchy_ending_gift_herd } + scope:actor = { + diarch_interaction_set_or_update_global_variable_effect = { VARIABLE = di_track_entr_herd_decline } + diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_herd_decline_actor_list } + } + scope:recipient = { + diarch_interaction_add_to_global_list_effect = { VARIABLE_LIST = di_track_entr_herd_decline_recipient_list } + } + } } auto_accept = { @@ -7984,6 +8091,11 @@ liege_dismiss_entrenched_regency_interaction = { add = 3 scope:diarchy_ending_gift_cash = yes } + ## Herd. + modifier = { + add = 5 + scope:diarchy_ending_gift_herd = yes + } } } @@ -8749,7 +8861,7 @@ appoint_vizier_interaction = { # We enter into a vizierate with scope:secondary_recipient. custom_tooltip = { text = appoint_vizier_interaction.tt.enter_vizierate_with_secondary_recipient - start_diarchy = vizierate + try_start_diarchy = vizierate # The player uses scope:secondary_recipient. if = { limit = { @@ -9051,7 +9163,7 @@ appoint_junior_emperor_interaction = { } custom_tooltip = { text = appoint_junior_emperor_interaction.tt.enter_junior_emperorship_with_secondary_recipient - start_diarchy = junior_emperorship + try_start_diarchy = junior_emperorship set_diarch = scope:secondary_recipient } # We set them to be our designated heir. @@ -9069,7 +9181,7 @@ appoint_junior_emperor_interaction = { } ## Whereas the AI grabs their pre-selected candidate. else = { - start_diarchy = junior_emperorship + try_start_diarchy = junior_emperorship set_diarch = scope:ai_recipient # We set them to be our designated heir. ## First grabbing the old one for opinions. @@ -9275,7 +9387,7 @@ appoint_co_emperor_interaction = { } custom_tooltip = { text = appoint_co_emperor_interaction.tt.enter_co_emperorship_with_secondary_recipient - start_diarchy = co_emperorship + try_start_diarchy = co_emperorship set_diarch = scope:secondary_recipient } # If appropriate, we set them to be our designated heir. @@ -9301,7 +9413,7 @@ appoint_co_emperor_interaction = { } ## Whereas the AI grabs their pre-selected candidate. else = { - start_diarchy = co_emperorship + try_start_diarchy = co_emperorship set_diarch = scope:ai_recipient # If appropriate, we set them to be our designated heir. if = { @@ -9491,7 +9603,7 @@ appoint_co_monarch_interaction = { } custom_tooltip = { text = appoint_co_monarch_interaction.tt.enter_co_monarchy_with_secondary_recipient - start_diarchy = co_monarchy + try_start_diarchy = co_monarchy set_diarch = scope:secondary_recipient } # We set them to be our designated heir. @@ -9509,7 +9621,7 @@ appoint_co_monarch_interaction = { } ## Whereas the AI grabs their pre-selected candidate. else = { - start_diarchy = co_emperorship + try_start_diarchy = co_emperorship set_diarch = scope:ai_recipient # We set them to be our designated heir. ## First grabbing the old one for opinions. diff --git a/common/character_interactions/00_faction_interactions.txt b/common/character_interactions/00_faction_interactions.txt index 985199b7..c820f159 100644 --- a/common/character_interactions/00_faction_interactions.txt +++ b/common/character_interactions/00_faction_interactions.txt @@ -24,7 +24,7 @@ force_join_faction_interaction = { is_valid_showing_failures_only = { scope:actor = { trigger_if = { - limit = { has_government = administrative_government } + limit = { government_has_flag = government_is_administrative } custom_tooltip = { text = force_join_faction_admin_requirement_desc OR = { @@ -113,8 +113,8 @@ force_join_faction_interaction = { #Spend influence send_option = { is_shown = { - scope:actor = { has_government = administrative_government } - scope:actor.top_liege ?= { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } + scope:actor.top_liege ?= { government_has_flag = government_is_administrative } } is_valid = { # Convincing someone with influence is not available if they hate you or love the liege scope:actor ?= { influence >= { value = scope:actor.monumental_influence_value multiply = 2 } } diff --git a/common/character_interactions/00_fp3_interactions.txt b/common/character_interactions/00_fp3_interactions.txt index a1215e8d..0daf352a 100644 --- a/common/character_interactions/00_fp3_interactions.txt +++ b/common/character_interactions/00_fp3_interactions.txt @@ -601,21 +601,52 @@ fp3_request_turkic_invasion_interaction = { scope:financial_support = yes } trigger_event = fp3_misc_decisions.0006 - show_as_tooltip = { - spawn_army = { - men_at_arms = { - type = horse_archers - stacks = fp3_request_invasion_troop_value_bonus_troops + if = { + limit = { + has_mpo_dlc_trigger = yes + } + show_as_tooltip = { + spawn_army = { + men_at_arms = { + type = horse_archers + stacks = fp3_request_invasion_troop_value_bonus_troops + } + men_at_arms = { + type = steppe_raiders + stacks = fp3_request_invasion_troop_value_bonus_troops + } + men_at_arms = { + type = light_horsemen + stacks = fp3_request_invasion_troop_value_bonus_troops + } + men_at_arms = { + type = nomadic_riders + stacks = fp3_request_invasion_troop_value_bonus_levy_nomads + } + location = capital_province + uses_supply = yes + inheritable = no + name = turkic_tribal_event_troops } - men_at_arms = { - type = light_horsemen - stacks = fp3_request_invasion_troop_value_bonus_troops + } + } + else = { + show_as_tooltip = { + spawn_army = { + men_at_arms = { + type = horse_archers + stacks = fp3_request_invasion_troop_value_bonus_troops + } + men_at_arms = { + type = light_horsemen + stacks = fp3_request_invasion_troop_value_bonus_troops + } + levies = fp3_request_invasion_troop_value_bonus_levy_troops + location = capital_province + uses_supply = yes + inheritable = no + name = turkic_tribal_event_troops } - levies = fp3_request_invasion_troop_value_bonus_levy_troops - location = capital_province - uses_supply = yes - inheritable = no - name = turkic_tribal_event_troops } } } diff --git a/common/character_interactions/00_gift.txt b/common/character_interactions/00_gift.txt index 6b0ab337..2f06942d 100644 --- a/common/character_interactions/00_gift.txt +++ b/common/character_interactions/00_gift.txt @@ -69,7 +69,10 @@ gift_interaction = { is_valid_showing_failures_only = { scope:actor.gold >= gift_value - scope:recipient = { is_busy_in_events_localised = yes } + scope:recipient = { + is_busy_in_events_localised = yes + NOT = { is_imprisoned_by = scope:actor } + } } on_auto_accept = { @@ -232,7 +235,7 @@ gift_interaction = { scope:recipient = { AND = { is_vassal_of = scope:actor - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } NOT = { @@ -277,10 +280,10 @@ gift_interaction = { if = { limit = { is_ruler = yes - has_government = administrative_government + government_has_flag = government_is_administrative scope:recipient = { is_ruler = yes - has_government = administrative_government + government_has_flag = government_is_administrative any_held_title = { is_noble_family_title = yes } @@ -733,6 +736,17 @@ gift_interaction = { } } + # Nomads are slightly less likely to do this since they'd prefer to send Herd instead + modifier = { + add = -10 + scope:actor = { + government_has_flag = government_is_nomadic + } + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + modifier = { factor = 0.1 scope:recipient = { diff --git a/common/character_interactions/00_grant_titles_interaction.txt b/common/character_interactions/00_grant_titles_interaction.txt index b5c64604..bc0c18bb 100644 --- a/common/character_interactions/00_grant_titles_interaction.txt +++ b/common/character_interactions/00_grant_titles_interaction.txt @@ -34,9 +34,15 @@ grant_titles_interaction = { } trigger_if = { limit = { - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } } - scope:recipient = { NOT = { has_government = administrative_government } } + scope:recipient = { NOT = { government_has_flag = government_is_administrative } } + } + trigger_if = { + limit = { + scope:actor = { government_has_flag = government_is_nomadic } + } + scope:recipient = { NOT = { government_has_flag = government_is_herder } } } } @@ -136,6 +142,37 @@ grant_titles_interaction = { } } + trigger_if = { + limit = { + scope:actor = { + NOT = { + has_government = nomad_government + } + } + title_province = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + scope:recipient = { + is_ruler = no + } + } + custom_tooltip = { + text = GRANT_TITLES_ITEM_CANT_GIVE_NOMADIC_TITLES_TO_NON_NOMADS_TITLE + always = no + } + } + + trigger_if = { + limit = { is_nomad_title = yes } + custom_tooltip = { + text = GRANT_TITLES_ITEM_CANT_GIVE_NOMAD_TITLE + always = no + } + } + trigger_if = { limit = { is_head_of_faith = yes @@ -229,6 +266,25 @@ grant_titles_interaction = { } on_accept = { + if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + vassal_limit_available <= 0 + is_independent_ruler = yes + scope:recipient = { + NOT = { is_vassal_of = scope:actor } + } + } + } + custom_tooltip = grant_title_nomad_and_at_vassal_limit + } + scope:recipient = { + add_character_flag = { + flag = domicile_culture_and_faith_check + days = 1 + } + } if = { limit = { scope:recipient = { @@ -1031,6 +1087,25 @@ grant_titles_interaction = { #Feedback for actor hidden_effect = { if = { + limit = { + government_has_flag = government_is_nomadic + vassal_limit_available <= 0 + is_independent_ruler = yes + scope:recipient = { + NOT = { is_vassal_of = scope:actor } + } + } + send_interface_toast = { + type = event_toast_effect_neutral + title = grant_titles_interaction_notification + + left_icon = scope:actor + right_icon = scope:recipient + + custom_tooltip = grant_titles_interaction_notification_effect_7 + } + } + else_if = { limit = { any_in_list = { list = target_titles @@ -1283,7 +1358,7 @@ grant_governorship_interaction = { } } scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative highest_held_title_tier >= tier_county } @@ -1352,7 +1427,7 @@ grant_governorship_interaction = { } trigger_if = { limit = { is_landed = yes } - has_government = administrative_government + government_has_flag = government_is_administrative } is_clergy = no # Gallivanters won't accept additional responsibilities. @@ -2106,4 +2181,4 @@ grant_governorship_interaction = { add = 100 } } -} +} \ No newline at end of file diff --git a/common/character_interactions/00_heir.txt b/common/character_interactions/00_heir.txt index 3c832bcc..f64b94f5 100644 --- a/common/character_interactions/00_heir.txt +++ b/common/character_interactions/00_heir.txt @@ -15,7 +15,7 @@ designate_heir_interaction = { trigger_if = { limit = { # Admin always has access to this - Recipient just need to be their child scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative any_held_title = { is_noble_family_title = yes } @@ -62,7 +62,7 @@ designate_heir_interaction = { if = { limit = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative any_held_title = { is_noble_family_title = yes } @@ -94,7 +94,7 @@ designate_heir_interaction = { if = { limit = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative any_held_title = { is_noble_family_title = yes } @@ -126,7 +126,7 @@ designate_heir_interaction = { scope:actor = { trigger_if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative any_held_title = { is_noble_family_title = yes } diff --git a/common/character_interactions/00_invite_agent_to_scheme.txt b/common/character_interactions/00_invite_agent_to_scheme.txt index aee64fc6..54b6a8c2 100644 --- a/common/character_interactions/00_invite_agent_to_scheme.txt +++ b/common/character_interactions/00_invite_agent_to_scheme.txt @@ -24,6 +24,7 @@ invite_agent_to_scheme_interaction = { always = scope:de_jure_title always = scope:claimed_title always = scope:piety + always = scope:herd } } force_add_to_agent_slot = { @@ -52,6 +53,7 @@ invite_agent_to_scheme_interaction = { always = scope:de_jure_title always = scope:claimed_title always = scope:piety + always = scope:herd } } custom_tooltip = offer_bribes.tt.window_jump_fix @@ -156,7 +158,7 @@ invite_agent_to_scheme_interaction = { type = council_rights level = 1 } - set_vassal_contract_modification_blocked = yes + set_subject_contract_modification_blocked = yes } } create_title_and_vassal_change = { @@ -205,6 +207,40 @@ invite_agent_to_scheme_interaction = { } scope:recipient = { add_piety = piety_bribe_value } } + # Herd + if = { + limit = { always = scope:herd } + if = { + limit = { + scope:recipient.domicile ?= { + herd > 0 + } + } + scope:actor = { + pay_herd = { + target = scope:recipient + value = domicile.herd_bribe_value + } + } + } + else = { + scope:actor = { custom_tooltip = scheme_change_herd_value } + hidden_effect = { + scope:actor.domicile = { + change_herd = { + value = herd_bribe_value + multiply = -1 + } + } + scope:recipient = { + add_gold = { + value = herd_bribe_value + multiply = 0.1 + } + } + } + } + } } # Stress. ## For scope: recipient. @@ -489,14 +525,14 @@ invite_agent_to_scheme_interaction = { flag = influence is_shown = { scope:actor.top_liege ?= scope:recipient.top_liege - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } scope:recipient = { OR = { - has_government = administrative_government - host = { has_government = administrative_government } + government_has_flag = government_is_administrative + host = { government_has_flag = government_is_administrative } AND = { highest_held_title_tier = tier_barony - liege = { has_government = administrative_government } + liege = { government_has_flag = government_is_administrative } } } } @@ -539,7 +575,10 @@ invite_agent_to_scheme_interaction = { custom_tooltip = { text = council_rights.tt.already_has_council_rights scope:recipient = { - NOT = { vassal_contract_has_flag = can_demand_council_seat } + NOR = { + vassal_contract_has_flag = can_demand_council_seat + vassal_contract_has_flag = can_demand_kurultai_seat + } } } would_agent_accept_petty_bribes_against_target_trigger = yes @@ -631,6 +670,38 @@ invite_agent_to_scheme_interaction = { } localization = SCHEME_AGENT_CLAIMED_TITLE } + # Nomad Chars + ## Use Herd + send_option = { + flag = herd + is_shown = { + # We don't show bribes for schemes where agents will always auto-accept or else deny. + NAND = { + scope:scheme = { is_scheme_category = contract } + scope:recipient = { is_courtier_of = scope:actor } + } + scope:actor = { + government_has_flag = government_is_nomadic + is_ai = no + } + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:actor.domicile.herd >= herd_bribe_value + would_agent_accept_petty_bribes_against_target_trigger = yes + } + localization = SCHEME_AGENT_HERD + current_description = { + # Triggered desc so that we don't get a weird double tooltip. + triggered_desc = { + trigger = { scope:actor.domicile.herd >= herd_bribe_value } + desc = SCHEME_AGENT_HERD_VALID + } + } + } # Cofaithists ## Piety send_option = { diff --git a/common/character_interactions/00_marriage_interactions.txt b/common/character_interactions/00_marriage_interactions.txt index a591d0bf..3916c4cf 100644 --- a/common/character_interactions/00_marriage_interactions.txt +++ b/common/character_interactions/00_marriage_interactions.txt @@ -587,11 +587,11 @@ arrange_marriage_interaction = { limit = { scope:actor = { is_ai = yes - NOT = { government_has_flag = government_is_republic } + NOT = { government_has_flag = government_is_special_republic } } } NOT = { - scope:recipient = { government_has_flag = government_is_republic } + scope:recipient = { government_has_flag = government_is_special_republic } } } @@ -680,6 +680,15 @@ arrange_marriage_interaction = { on_accept = { marriage_interaction_on_accept_effect = yes scope:actor = { + if = { + limit = { + scope:herd_send_option = yes + } + pay_herd = { + target = scope:recipient + value = scope:actor.domicile.medium_herd_value + } + } if = { limit = { has_variable = grand_wedding_promise_pending @@ -1003,6 +1012,25 @@ arrange_marriage_interaction = { flag = influence_send_option localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE } + + send_option = { # MPO Herd + is_shown = { # Actor must have a government that uses Herd + scope:actor = { + government_has_flag = government_is_nomadic + is_ai = no + } + # Recipient must care about Herd + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + is_valid = { + # Actor has enough Herd + scope:actor = { domicile.herd >= domicile.medium_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE + } should_use_extra_icon = { scope:actor = { has_usable_hook = scope:recipient } @@ -1485,7 +1513,16 @@ marry_off_interaction = { REVERSE_NON_HOUSE_TARGET = no } - scope:actor = { + scope:actor = { + if = { + limit = { + scope:herd_send_option = yes + } + pay_herd = { + target = scope:recipient + value = scope:actor.domicile.medium_herd_value + } + } if = { limit = { has_variable = grand_wedding_promise_pending @@ -1655,6 +1692,24 @@ marry_off_interaction = { flag = influence_send_option localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE } + send_option = { # MPO Herd + is_shown = { # Actor must have a government that uses Herd + scope:actor = { + government_has_flag = government_is_nomadic + is_ai = no + } + # Recipient must care about Herd + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + is_valid = { + # Actor has enough Herd + scope:actor = { domicile.herd >= domicile.medium_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE + } send_options_exclusive = no @@ -3074,11 +3129,14 @@ offer_concubine = { ai_targets = { ai_recipients = neighboring_rulers + ai_recipients = suzerain + ai_recipients = liege + max = 5 } ai_target_quick_trigger = { adult = yes } - ai_frequency = 144 + ai_frequency = 36 greeting = positive notification_text = OFFER_CONCUBINE_NOTIFICATION @@ -3120,6 +3178,7 @@ offer_concubine = { } } scope:recipient = { + NOT = { government_has_flag = government_is_herder } allowed_concubines = yes is_adult = yes } @@ -3635,6 +3694,17 @@ offer_concubine = { } } + modifier = { # Age considerations + factor = 0 + scope:recipient = { + OR = { + age >= scope:secondary_actor.age_plus_10 + age <= scope:secondary_actor.age_minus_10 + scope:secondary_actor.age >= 30 # Concubines are meant to be young... + } + } + } + modifier = { # Incest Filtering: Hard NO! factor = 0 scope:recipient = { @@ -3746,6 +3816,14 @@ dismiss_concubine_interaction = { is_valid_showing_failures_only = { scope:recipient = { NOT = { has_strong_hook = scope:actor } } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:target + } + text = BOUND_TO_FAMILY_WIDOW + } + } } auto_accept = yes @@ -3872,6 +3950,14 @@ divorce_character_interaction = { } scope:recipient = { is_busy_in_events_localised = yes } scope:recipient = { NOT = { has_strong_hook = scope:actor } } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:target + } + text = BOUND_TO_FAMILY_WIDOW + } + } } auto_accept = yes @@ -4001,6 +4087,14 @@ divorce_character_house_head_interaction = { NOT = { scope:secondary_recipient = { has_strong_hook = scope:actor } } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:target + } + text = BOUND_TO_FAMILY_WIDOW + } + } } ai_accept = { @@ -4365,6 +4459,14 @@ divorce_character_rel_head_interaction = { NOT = { scope:secondary_recipient = { has_strong_hook = scope:actor } } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:recipient + } + text = BOUND_TO_FAMILY_WIDOW + } + } } ai_accept = { @@ -4772,6 +4874,14 @@ divorce_character_dynast_request_interaction = { text = "same_realm_as" } } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:target + } + text = BOUND_TO_FAMILY_WIDOW + } + } } auto_accept = yes @@ -4938,6 +5048,14 @@ divorce_character_dynast_request_rel_head_interaction = { text = "same_realm_as" } } + scope:actor = { + custom_tooltip = { + NOT = { + var:family_widow_forbidden_divorce ?= scope:target + } + text = BOUND_TO_FAMILY_WIDOW + } + } } ai_accept = { diff --git a/common/character_interactions/00_modifiy_vassal_contract.txt b/common/character_interactions/00_modifiy_vassal_contract.txt index 35fd821e..42cd3082 100644 --- a/common/character_interactions/00_modifiy_vassal_contract.txt +++ b/common/character_interactions/00_modifiy_vassal_contract.txt @@ -4,6 +4,7 @@ category = interaction_category_vassal common_interaction = yes icon = icon_contract_modification_single + interface_priority = 5 send_name = "modify_vassal_contract_interaction_SEND" desc = liege_modify_vassal_contract_interaction_desc @@ -14,18 +15,15 @@ is_shown = { scope:recipient = { NOT = { this = scope:actor } - exists = liege - liege = scope:actor + liege ?= scope:actor # this excludes tributary contracts by default is_ruler = yes vassal_contract_has_modifiable_obligations = yes - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } + NOT = { government_has_flag = government_is_nomadic } } } is_valid_showing_failures_only = { - scope:recipient = { - is_busy_in_events_localised = yes - } NOT = { scope:actor = { is_at_war_with = scope:recipient } } } @@ -33,11 +31,11 @@ trigger_if = { #If they're blocked we don't want to show anything else limit = { scope:recipient = { - vassal_contract_is_blocked_from_modification = yes + subject_contract_is_blocked_from_modification = yes } } scope:recipient = { - vassal_contract_is_blocked_from_modification = no + subject_contract_is_blocked_from_modification = no } } trigger_else = { @@ -211,7 +209,7 @@ scope:recipient = { hidden_effect = { - set_vassal_contract_modification_blocked = yes + set_subject_contract_modification_blocked = yes } } @@ -283,14 +281,14 @@ vassal_modify_vassal_contract_interaction = { scope:recipient = { is_independent_ruler = no NOT = { this = scope:actor } - liege = scope:actor + liege ?= scope:actor # this excludes tributary contracts by default vassal_contract_has_modifiable_obligations = yes - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } + NOT = { government_has_flag = government_is_nomadic } } } is_valid_showing_failures_only = { - scope:actor = { is_busy_in_events_localised = yes } NOT = { scope:recipient = { is_at_war_with = scope:actor } } } @@ -298,11 +296,11 @@ vassal_modify_vassal_contract_interaction = { trigger_if = { #If you're blocked we don't want to show anything else limit = { scope:recipient = { - vassal_contract_is_blocked_from_modification = yes + subject_contract_is_blocked_from_modification = yes } } scope:recipient = { - vassal_contract_is_blocked_from_modification = no + subject_contract_is_blocked_from_modification = no } } trigger_else = { @@ -312,11 +310,16 @@ vassal_modify_vassal_contract_interaction = { scope:recipient = { # Must be an even trade overall - custom_description = { - text = "vassal_modify_vassal_contract_cannot_increase_obligation_level" - object = scope:actor - value = count_obligation_improvements_for_vassal_include_hook - count_obligation_improvements_for_vassal_include_hook = 0 + trigger_if = { + limit = { + count_obligation_improvements_for_vassal_include_hook >= 0 + } + custom_description = { + text = "vassal_modify_vassal_contract_cannot_increase_obligation_level" + object = scope:actor + value = count_obligation_improvements_for_vassal_include_hook + count_obligation_improvements_for_vassal_include_hook = 0 + } } # Cannot change more than three things at once @@ -344,7 +347,7 @@ vassal_modify_vassal_contract_interaction = { add_achievement_flag_effect = { FLAG = achievement_fine_print_flag } } - hidden_effect = { set_vassal_contract_modification_blocked = yes } + hidden_effect = { set_subject_contract_modification_blocked = yes } every_in_list = { list = changed_obligations @@ -484,8 +487,8 @@ ai_only_liege_modify_vassal_contract_interaction = { OR = { has_usable_hook = scope:recipient AND = { - has_government = administrative_government - scope:recipient = { has_government = administrative_government } + government_has_flag = government_is_administrative + scope:recipient = { government_has_flag = government_is_administrative } } } } @@ -494,16 +497,14 @@ ai_only_liege_modify_vassal_contract_interaction = { NOT = { has_strong_hook = scope:actor } - exists = liege - liege = scope:actor + liege ?= scope:actor # this excludes tributary contracts by default is_ruler = yes OR = { vassal_contract_can_be_modified_trigger = yes - has_government = administrative_government + government_has_flag = government_is_administrative } does_ai_liege_in_vassal_contract_desire_obligation_change = yes } - scope:recipient = { is_busy_in_events_localised = yes } NOT = { scope:actor = { is_at_war_with = scope:recipient } } } @@ -515,7 +516,7 @@ ai_only_liege_modify_vassal_contract_interaction = { } scope:recipient = { - set_vassal_contract_modification_blocked = yes + set_subject_contract_modification_blocked = yes trigger_event = char_interaction.0250 } @@ -576,12 +577,12 @@ ai_only_vassal_modify_vassal_contract_interaction = { } scope:recipient = { NOT = { this = scope:actor } + liege ?= scope:actor # this excludes tributary contracts by default is_ruler = yes NOT = { has_strong_hook = scope:actor } } - scope:recipient = { is_busy_in_events_localised = yes } NOT = { scope:actor = { is_at_war_with = scope:recipient } } } @@ -642,11 +643,10 @@ admin_liege_modify_vassal_contract_interaction = { is_shown = { scope:recipient = { NOT = { this = scope:actor } - exists = liege - liege = scope:actor + liege ?= scope:actor # this excludes tributary contracts by default is_ruler = yes vassal_contract_has_modifiable_obligations = yes - has_government = administrative_government + government_has_flag = government_is_administrative any_held_title = { tier >= tier_duchy is_noble_family_title = no @@ -655,9 +655,6 @@ admin_liege_modify_vassal_contract_interaction = { } is_valid_showing_failures_only = { - scope:recipient = { - is_busy_in_events_localised = yes - } NOT = { scope:actor = { is_at_war_with = scope:recipient } } } @@ -665,11 +662,11 @@ admin_liege_modify_vassal_contract_interaction = { trigger_if = { #If they're blocked we don't want to show anything else limit = { scope:recipient = { - vassal_contract_is_blocked_from_modification = yes + subject_contract_is_blocked_from_modification = yes } } scope:recipient = { - vassal_contract_is_blocked_from_modification = no + subject_contract_is_blocked_from_modification = no } } trigger_else = { @@ -852,14 +849,13 @@ admin_vassal_modify_vassal_contract_interaction = { scope:actor = { is_independent_ruler = no NOT = { this = scope:recipient } - liege = scope:recipient + liege ?= scope:recipient # this excludes tributary contracts by default vassal_contract_has_modifiable_obligations = yes - has_government = administrative_government + government_has_flag = government_is_administrative } } is_valid_showing_failures_only = { - scope:recipient = { is_busy_in_events_localised = yes } NOT = { scope:recipient = { is_at_war_with = scope:actor } } scope:actor = { custom_tooltip = { @@ -876,11 +872,11 @@ admin_vassal_modify_vassal_contract_interaction = { trigger_if = { #If you're blocked we don't want to show anything else (we don't really use this for admin, but we'll keep the logic, just in case) limit = { scope:actor = { - vassal_contract_is_blocked_from_modification = yes + subject_contract_is_blocked_from_modification = yes } } scope:actor = { - vassal_contract_is_blocked_from_modification = no + subject_contract_is_blocked_from_modification = no } } trigger_else = { @@ -1160,3 +1156,833 @@ admin_vassal_modify_vassal_contract_interaction = { } } } + +# Separate interactions are set up for Nomads - This is to help with localisation and some of the effects +nomad_liege_modify_vassal_contract_interaction = { + special_interaction = liege_modify_vassal_contract + interface = modify_vassal_contract + category = interaction_category_vassal + common_interaction = yes + icon = icon_contract_modification_single + + send_name = nomad_liege_modify_vassal_contract_interaction + desc = nomad_liege_modify_vassal_contract_interaction_desc + + force_notification = yes + notification_text = MODIFY_VASSAL_CONTRACT_NOTIFICATION_TO_VASSAL + + is_shown = { + scope:recipient = { + NOT = { this = scope:actor } + liege ?= scope:actor # this excludes tributary contracts by default + is_ruler = yes + vassal_contract_has_modifiable_obligations = yes + government_has_flag = government_is_nomadic + } + } + + is_valid_showing_failures_only = { + NOT = { scope:actor = { is_at_war_with = scope:recipient } } + } + + can_send = { + trigger_if = { #If they're blocked we don't want to show anything else + limit = { + scope:recipient = { + subject_contract_is_blocked_from_modification = yes + } + } + scope:recipient = { + subject_contract_is_blocked_from_modification = no + } + } + trigger_else = { + scope:actor = { + has_changed_contract_obligation_trigger = yes + + custom_description = { + text = "liege_modify_vassal_contract_cannot_exceed_tyranny_cap" + object = scope:actor + NOT = { + vassal_obligation_increase_tyranny_gain_multiplier > 1 + } + } + + # Cannot change more than three things at once + custom_description = { + text = "vassal_modify_vassal_contract_obligation_change_limit" + value = list_size:changed_obligations + list_size:changed_obligations <= max_contract_changes + } + + # If the trade without the hook usage is already in the vassal's favour or fair then don't waste your hook + save_temporary_scope_value_as = { + name = obligations_favoring_vassal + value = scope:recipient.count_obligation_improvements_for_vassal + } + trigger_if = { + limit = { scope:obligations_favoring_vassal > 0 } + custom_description = { + text = "vassal_modify_vassal_contract_unnecessary_hook_usage_vassal_favor" + object = scope:recipient + value = scope:obligations_favoring_vassal + NOT = { always = scope:hook } + } + } + trigger_else_if = { + limit = { scope:obligations_favoring_vassal = 0 } + custom_description = { + text = "vassal_modify_vassal_contract_unnecessary_hook_usage_equal" + object = scope:recipient + NOT = { always = scope:hook } + } + } + trigger_else = {} # Otherwise we're fine! + } + } + } + + auto_accept = yes + on_accept = { + hidden_effect = { + # Struggle Catalysts + ## We work these out first so they're not invalidated by the actual effect block. + if = { + limit = { + catalyst_granted_powerful_diff_faith_vassal_religious_protection_preliminary_trigger = { CHAR = scope:recipient } + scope:actor = { + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_granted_powerful_diff_faith_vassal_religious_protection + CHAR = scope:recipient + } + } + } + } + scope:actor = { + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_granted_powerful_diff_faith_vassal_religious_protection + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_granted_powerful_diff_faith_vassal_religious_protection + character = scope:actor + } + } + } + } + if = { + limit = { + catalyst_revoked_powerful_diff_faith_vassal_religious_protection_preliminary_trigger = { CHAR = scope:recipient } + scope:actor = { + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_revoked_powerful_diff_faith_vassal_religious_protection + CHAR = scope:recipient + } + } + } + } + scope:actor = { + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_revoked_powerful_diff_faith_vassal_religious_protection + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_revoked_powerful_diff_faith_vassal_religious_protection + character = scope:actor + } + } + } + } + + # Improving contract catalyst + if = { + limit = { + scope:recipient.count_obligation_improvements_for_vassal > 0 + scope:actor = { + is_diff_faith_or_culture_trigger = { + CHAR = scope:recipient + STATUS = involved + } + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_grant_privilege_to_diff_faith_culture_vassal + CHAR = scope:recipient + } + } + } + } + scope:actor = { + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_grant_privilege_to_diff_faith_culture_vassal + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_grant_privilege_to_diff_faith_culture_vassal + character = scope:actor + } + } + } + } + } + + # Enact changes. + scope:actor = { + send_interface_message = { + type = msg_vassal_contract_change + title = modify_vassal_contract_interaction_notification + right_icon = scope:recipient + if = { + limit = { vassal_obligation_increase_tyranny_gain != 0 } + stress_impact = { + just = medium_stress_impact_gain + generous = medium_stress_impact_gain + } + } + if = { + limit = { + always = scope:hook + } + use_hook = scope:recipient + add_achievement_flag_effect = { FLAG = achievement_fine_print_flag } + } + + scope:recipient = { + hidden_effect = { + set_subject_contract_modification_blocked = yes + set_variable = { + name = nomad_contract_cooldown + value = yes + years = nomad_contract_cooldown_value + } + } + } + + every_in_list = { + list = changed_obligations + + save_scope_as = obligation + + scope:recipient = { + vassal_contract_set_obligation_level = { + type = scope:obligation.vassal_contract_type + level = scope:obligation + } + } + + } + } + } + + # Additional Flavor Titles + scope:recipient = { additional_flavor_check_effect = yes } + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + send_options_exclusive = no +} + +nomad_vassal_modify_vassal_contract_interaction = { + special_interaction = vassal_modify_vassal_contract + interface = modify_vassal_contract + category = interaction_category_vassal + interface_priority = 65 + common_interaction = yes + icon = icon_contract_modification_single + + send_name = "nomad_vassal_modify_vassal_contract_interaction_send" + desc = nomad_vassal_modify_vassal_contract_interaction_desc + + redirect = { + # need to reverse the role for the UI to work properly + scope:recipient = { + save_scope_as = secondary_recipient + } + scope:actor = { + save_scope_as = recipient + } + + scope:secondary_recipient = { + save_scope_as = actor + } + } + + is_shown = { + scope:recipient = { + is_independent_ruler = no + NOT = { this = scope:actor } + liege ?= scope:actor # this excludes tributary contracts by default + vassal_contract_has_modifiable_obligations = yes + government_has_flag = government_is_nomadic + } + } + + is_valid_showing_failures_only = { + NOT = { scope:recipient = { is_at_war_with = scope:actor } } + } + + can_send = { + trigger_if = { #If you're blocked we don't want to show anything else + limit = { + scope:recipient = { + subject_contract_is_blocked_from_modification = yes + } + } + scope:recipient = { + subject_contract_is_blocked_from_modification = no + } + } + trigger_else = { + scope:actor = { + has_changed_contract_obligation_trigger = yes + } + + scope:recipient = { + # Must be an even trade overall + custom_description = { + text = "vassal_modify_vassal_contract_cannot_increase_obligation_level" + object = scope:actor + value = count_obligation_improvements_for_vassal_include_hook + count_obligation_improvements_for_vassal_include_hook = 0 + } + + # Cannot change more than three things at once + custom_description = { + text = "vassal_modify_vassal_contract_obligation_change_limit" + value = list_size:changed_obligations + list_size:changed_obligations <= max_contract_changes + } + } + } + } + + auto_accept = yes + + on_accept = { + # Enact changes + scope:recipient = { + send_interface_message = { + type = msg_vassal_contract_change + title = modify_vassal_contract_interaction_notification + right_icon = scope:actor + if = { + limit = { always = scope:hook } + use_hook = scope:actor + add_achievement_flag_effect = { FLAG = achievement_fine_print_flag } + } + + # Activate cooldown - To prevent liege from changing it too soon + hidden_effect = { + set_variable = { + name = nomad_contract_cooldown + value = yes + years = nomad_contract_cooldown_value + } + } + + hidden_effect = { set_subject_contract_modification_blocked = yes } + + every_in_list = { + list = changed_obligations + + save_scope_as = obligation + + scope:recipient = { + vassal_contract_set_obligation_level = { + type = scope:obligation.vassal_contract_type + level = scope:obligation + } + } + } + } + } + # If there's a diarch involved, and they called in their change, that gets flagged. + diarch_changed_own_contract_effect = yes + # Additional Flavor Titles + scope:recipient = { additional_flavor_check_effect = yes } + } + + on_decline = { + # Activate cooldown - You may only ask for it to be changed every so often (this mostly exists for MP, since you cannot send it to the AI unless they accept) + hidden_effect = { + scope:recipient = { + set_variable = { + name = nomad_contract_request_cooldown + value = yes + years = nomad_contract_cooldown_value + } + } + } + } + + # Send Options + # Hook + send_option = { + is_valid = { + scope:recipient = { + has_usable_hook = scope:actor + } + } + flag = hook + localization = SCHEME_HOOK + } + send_option = { + is_shown = { + scope:recipient = { is_diarch_of_target = scope:actor } + } + is_valid = { + scope:recipient = { + trigger_if = { + limit = { has_variable_list = diarch_contract_rights_used_list } + NOT = { + is_target_in_variable_list = { + name = diarch_contract_rights_used_list + target = scope:actor + } + } + } + } + } + flag = diarch + localization = CALL_IN_DIARCH_RIGHTS + } + should_use_extra_icon = { + scope:recipient = { has_usable_hook = scope:actor } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + send_options_exclusive = no +} + +suzerain_modify_tributary_contract_interaction = { + special_interaction = liege_modify_vassal_contract + interface = modify_vassal_contract + category = interaction_category_vassal + common_interaction = yes + icon = icon_contract_modification_single + + send_name = "suzerain_modify_tributary_contract_interaction_send" + desc = suzerain_modify_tributary_contract_interaction_desc + + force_notification = yes + notification_text = MODIFY_VASSAL_CONTRACT_NOTIFICATION_TO_VASSAL + + is_shown = { + scope:recipient = { + is_tributary_of = scope:actor # excludes vassals by default + subject_contract_has_modifiable_obligations = yes + NOT = { government_has_flag = government_is_herder } + } + } + + is_valid_showing_failures_only = { + NOT = { scope:recipient = { is_at_war_with = scope:actor } } + } + + can_send = { + any_in_list = { + list = changed_obligations + } + trigger_if = { #If they're blocked we don't want to show anything else + limit = { + scope:recipient = { + subject_contract_is_blocked_from_modification = yes + } + } + scope:recipient = { + subject_contract_is_blocked_from_modification = no + } + } + trigger_else = { + scope:actor = { + has_changed_contract_obligation_trigger = yes + + # Cannot change more than three things at once + custom_description = { + text = "vassal_modify_vassal_contract_obligation_change_limit" + value = list_size:changed_obligations + list_size:changed_obligations <= max_contract_changes + } + + # If the trade without the hook usage is already in the vassal's favour or fair then don't waste your hook + save_temporary_scope_value_as = { + name = obligations_favoring_tributary + value = scope:recipient.count_obligation_improvements_for_vassal + } + trigger_if = { + limit = { scope:obligations_favoring_tributary > 0 } + custom_description = { + text = "tributary_modify_vassal_contract_unnecessary_hook_usage_vassal_favor" + object = scope:recipient + value = scope:obligations_favoring_tributary + NOT = { always = scope:hook } + } + } + trigger_else_if = { + limit = { scope:obligations_favoring_tributary = 0 } + custom_description = { + text = "tributary_modify_vassal_contract_unnecessary_hook_usage_equal" + object = scope:recipient + NOT = { always = scope:hook } + } + } + + # You can afford the prestige cost of an unequal contract + trigger_else_if = { + limit = { + scope:obligations_favoring_tributary < 0 + NOT = { always = scope:hook } + } + scope:actor = { + prestige >= medium_prestige_value + } + } + trigger_else = {} # Otherwise we're fine! + } + } + } + + auto_accept = yes + + on_accept = { + scope:actor = { + send_interface_message = { + type = msg_vassal_contract_change + title = modify_vassal_contract_interaction_notification + right_icon = scope:recipient + if = { + limit = { + always = scope:hook + } + use_hook = scope:recipient + add_achievement_flag_effect = { FLAG = achievement_fine_print_flag } + } + + # Prestige and opinion cost of making an unequal contract without a hook + if = { + limit = { + scope:recipient.count_obligation_improvements_for_vassal < 0 + NOT = { always = scope:hook } + } + + add_prestige = medium_prestige_loss + + scope:recipient = { + add_opinion = { + modifier = outraged_opinion + opinion = -30 + target = scope:actor + } + } + + every_tributary = { + limit = { + NOT = { this = scope:recipient } + } + add_opinion = { + modifier = outraged_opinion + opinion = -10 + target = scope:actor + } + } + } + + scope:recipient = { + hidden_effect = { + set_subject_contract_modification_blocked = yes + } + } + + every_in_list = { + list = changed_obligations + + save_scope_as = obligation + + scope:recipient = { + tributary_contract_set_obligation_level = { + type = scope:obligation.vassal_contract_type + level = scope:obligation + } + } + } + } + + } + + # Additional Flavor Titles + scope:recipient = { additional_flavor_check_effect = yes } + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no +} + +subject_modify_tributary_contract_interaction = { + special_interaction = vassal_modify_vassal_contract + interface = modify_vassal_contract + category = interaction_category_vassal + interface_priority = 65 + common_interaction = yes + icon = icon_contract_modification_single + + send_name = "subject_modify_tributary_contract_interaction_send" + desc = subject_modify_tributary_contract_interaction_desc + + is_shown = { + scope:actor = { + is_tributary_of = scope:recipient # excludes vassals by default + subject_contract_has_modifiable_obligations = yes + } + } + + is_valid_showing_failures_only = { + NOT = { scope:recipient = { is_at_war_with = scope:actor } } + } + + can_send = { + any_in_list = { + list = changed_obligations + } + trigger_if = { #If you're blocked we don't want to show anything else (we don't really use this for admin, but we'll keep the logic, just in case) + limit = { + scope:actor = { + subject_contract_is_blocked_from_modification = yes + } + } + scope:actor = { + subject_contract_is_blocked_from_modification = no + } + } + trigger_else = { + # There is no cooldown present - To make sure we somehow don't show both cooldowns at the same time, we split them into separate triggers + trigger_if = { + limit = { + scope:actor = { + has_variable = nomad_contract_cooldown + } + } + custom_tooltip = { + text = nomad_tributary_contract_cooldown_desc + scope:actor = { + NOT = { has_variable = nomad_contract_cooldown } + } + } + } + trigger_else = { + custom_tooltip = { + text = nomad_contract_request_cooldown_desc + scope:actor = { + NOT = { has_variable = nomad_contract_request_cooldown } + } + } + } + + # You can afford the Gold cost + trigger_if = { + limit = { + NOT = { + scope:hook = yes + } + } + scope:actor = { + trigger_if = { + limit = { + government_has_flag = government_is_nomadic + scope:recipient = { government_has_flag = government_is_nomadic } + } + domicile.herd >= domicile.major_herd_value + } + trigger_else = { + gold >= major_gold_value + } + } + } + } + } + + auto_accept = { + custom_tooltip = { + text = nomad_vassal_force_obligation_change_desc + scope:hook = yes + } + } + + on_accept = { + # Enact changes + scope:actor = { + send_interface_message = { + type = msg_vassal_contract_change + title = modify_vassal_contract_interaction_notification + right_icon = scope:recipient + + # If you use a hook - Spend it + if = { + limit = { always = scope:hook } + use_hook = scope:recipient + } + + # If you didn't use a hook, pay Gold + if = { + limit = { + NOT = { + scope:hook = yes + } + } + scope:actor = { + if = { + limit = { + government_has_flag = government_is_nomadic + scope:recipient = { government_has_flag = government_is_nomadic } + } + pay_herd = { + target = scope:recipient + value = domicile.major_herd_value + } + } + else = { + pay_short_term_gold = { + target = scope:recipient + gold = major_gold_value + } + } + } + } + + # Activate cooldown - To prevent liege from changing it too soon + hidden_effect = { + set_variable = { + name = nomad_contract_cooldown + value = yes + years = nomad_contract_cooldown_value + } + } + + every_in_list = { + list = changed_obligations + + save_scope_as = obligation + + scope:actor = { + tributary_contract_set_obligation_level = { + type = scope:obligation.subject_contract_type + level = scope:obligation + } + } + } + } + } + + # If there's a diarch involved, and they called in their change, that gets flagged. + diarch_changed_own_contract_effect = yes + } + + on_decline = { + # Activate cooldown - You may only ask for it to be changed every so often (this mostly exists for MP, since you cannot send it to the AI unless they accept) + hidden_effect = { + scope:actor = { + set_variable = { + name = nomad_contract_request_cooldown + value = yes + years = nomad_contract_cooldown_value + } + } + } + } + + # Send Options + # Hook + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = SCHEME_HOOK + } + send_option = { + is_shown = { + scope:actor = { is_diarch_of_target = scope:recipient } + } + is_valid = { + scope:actor = { + trigger_if = { + limit = { has_variable_list = diarch_contract_rights_used_list } + NOT = { + is_target_in_variable_list = { + name = diarch_contract_rights_used_list + target = scope:recipient + } + } + } + } + } + flag = diarch + localization = CALL_IN_DIARCH_RIGHTS + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + send_options_exclusive = no + + ai_accept = { + base = -25 + + # Opinion Factor + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + desc = AI_OPINION_REASON + } + + modifier = { + add = { + add = scope:new_value + multiply = -25 + } + desc = AI_CONTRACT_BALANCE + } + } +} diff --git a/common/character_interactions/00_perk_interactions.txt b/common/character_interactions/00_perk_interactions.txt index fb78ea61..c6e3e31c 100644 --- a/common/character_interactions/00_perk_interactions.txt +++ b/common/character_interactions/00_perk_interactions.txt @@ -943,7 +943,7 @@ buy_claim_interaction = { value = minor_buy_claim_piety_value if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } multiply = 1.5 } @@ -960,7 +960,7 @@ buy_claim_interaction = { value = medium_buy_claim_piety_value if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } multiply = 1.5 } @@ -977,7 +977,7 @@ buy_claim_interaction = { value = major_buy_claim_piety_value if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } multiply = 1.5 } @@ -994,7 +994,7 @@ buy_claim_interaction = { value = massive_buy_claim_piety_value if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } multiply = 1.5 } @@ -1050,7 +1050,7 @@ buy_claim_interaction = { } if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } multiply = 1.5 } @@ -1098,6 +1098,24 @@ challenge_to_single_combat_interaction = { ai_max_reply_days = 0 popup_on_receive = yes pause_on_receive = yes + + name = { + first_valid = { + triggered_desc = { + trigger = { + scope:actor = { + government_has_flag = government_is_nomadic + } + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + desc = challenge_to_single_combat_nomadic_interaction + } + desc = challenge_to_single_combat_interaction + } + } + desc = challenge_to_single_combat_interaction_desc greeting = negative @@ -1107,7 +1125,20 @@ challenge_to_single_combat_interaction = { # First, check for the perk. scope:actor = { can_challenge_rival_to_single_combat_trigger = yes } # Then, look to see if this character is a rival. - scope:actor = { has_relation_rival = scope:recipient } + OR = { + scope:actor = { has_relation_rival = scope:recipient } + AND = { # If you are a Nomad you can challenge martial non-close family characters + scope:actor = { + government_has_flag = government_is_nomadic + has_perk = stalwart_leader_perk + } + scope:recipient = { + government_has_flag = government_is_nomadic + NOT = { is_close_family_of = scope:actor } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:actor } + } + } + } # Can't duel yourself. NOT = { scope:actor = scope:recipient } } @@ -1410,6 +1441,18 @@ challenge_to_single_combat_interaction = { multiply = -0.25 } } + + # To prevent Nomads from being constantly injured everywhere + modifier = { + NOT = { + scope:recipient = { has_relation_rival = scope:actor } + } + add = -100 + } + modifier = { + scope:actor = { has_any_good_relationship_with_character_trigger = { CHARACTER = scope:recipient } } + add = -100 + } # Unity modifiers evaluate_action_decreasing_house_unity = { diff --git a/common/character_interactions/00_prison_interactions.txt b/common/character_interactions/00_prison_interactions.txt index 3643696f..6de2a747 100644 --- a/common/character_interactions/00_prison_interactions.txt +++ b/common/character_interactions/00_prison_interactions.txt @@ -66,6 +66,12 @@ is_valid_showing_failures_only = { scope:actor = { allowed_to_imprison_character_trigger = { CHARACTER = scope:recipient } + trigger_if = { + limit = { + government_has_flag = government_is_nomadic + } + NOT = { has_realm_law = nomadic_authority_1 } + } } imprison_neutral_is_valid_showing_failures_only_triggers_trigger = yes custom_tooltip = { @@ -1827,11 +1833,34 @@ ransom_interaction = { flag = influence_send_option localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE } + + # MPO Herd + send_option = { + is_shown = { # Actor must have a government that uses Herd + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + is_ai = no + } + # Recipient must care about Herd + scope:recipient ?= { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + # Recipient has enough Herd + scope:recipient = { domicile.herd >= domicile.medium_herd_value } + } + flag = herd_send_option + localization = RANSOM_HERD_OPTION + } localization_values = { EXTORTIONATE_RANSOM_COST = scope:secondary_recipient.increased_ransom_cost_value RANSOM_COST = scope:secondary_recipient.ransom_cost_value CURRENT_GOLD = scope:recipient.gold + RANSOM_HERD_COST = ransom_herd_value_recipient } ai_accept = { @@ -2682,6 +2711,27 @@ pay_ransom_interaction = { flag = influence_send_option localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE } + + send_option = { # MPO Herd + is_shown = { # Actor must have a government that uses Herd + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + is_ai = no + } + # Recipient must care about Herd + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + # Actor has enough Herd + scope:actor = { domicile.herd >= domicile.medium_herd_value } + } + flag = herd_send_option + localization = PAY_FOR_BETTER_AI_ACCEPTANCE + } #Use hook send_option = { @@ -2705,6 +2755,7 @@ pay_ransom_interaction = { EXTORTIONATE_RANSOM_COST = scope:secondary_recipient.increased_ransom_cost_value RANSOM_COST = scope:secondary_recipient.ransom_cost_value CURRENT_GOLD = scope:actor.gold + RANSOM_HERD_COST = ransom_herd_value_actor } ai_accept = { @@ -2849,6 +2900,12 @@ pay_ransom_interaction = { scope:influence_send_option = yes desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION } + + modifier = { + add = 25 + scope:herd_send_option = yes + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } } auto_accept = { @@ -3518,6 +3575,26 @@ ransom_me_interaction = { flag = influence_send_option localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE } + + send_option = { # MPO Herd + is_shown = { # Actor must have a government that uses Herd + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + # Recipient must care about Herd + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + # Actor has enough Herd + scope:actor = { domicile.herd >= domicile.medium_herd_value } + } + flag = herd_send_option + localization = PAY_FOR_BETTER_AI_ACCEPTANCE + } #Use hook send_option = { @@ -3540,6 +3617,7 @@ ransom_me_interaction = { EXTORTIONATE_RANSOM_COST = scope:actor.increased_ransom_cost_value RANSOM_COST = scope:actor.ransom_cost_value CURRENT_GOLD = scope:actor.gold + RANSOM_HERD_COST = ransom_herd_value_actor } ai_accept = { @@ -3698,6 +3776,12 @@ ransom_me_interaction = { scope:influence_send_option = yes desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION } + + modifier = { + add = 25 + scope:herd_send_option = yes + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } } auto_accept = { @@ -3742,6 +3826,7 @@ ransom_me_interaction = { scope:extortionate_current_gold = yes } } + scope:herd_send_option = yes } } @@ -3818,6 +3903,7 @@ ransom_me_interaction = { scope:gold = yes scope:extortionate_gold = yes scope:current_gold = yes + scope:herd_send_option = yes AND = { scope:actor = { gold >= 25 @@ -3983,8 +4069,9 @@ release_from_prison_interaction = { if = { limit = { this.gold > 0 - NOT = { + NOR = { has_character_flag = realm_priest + has_character_flag = was_bookmaker } } pay_short_term_gold = { target = scope:actor gold = this.gold } @@ -5031,7 +5118,7 @@ release_from_prison_interaction = { localization = "RELEASE_DISFIGURE" is_shown = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative culture = { has_cultural_tradition = tradition_ep3_palace_politics } # If they're our partner emperor, we should use the maiming interaction instead. liege_should_systematically_maim_co_ruler_trigger = no @@ -5858,6 +5945,67 @@ execute_prisoner_interaction = { } } + #Nomads get the special beheading stuff + modifier = { + scope:actor = { + mpo_keep_prisoners_heads_trigger = yes + scope:recipient = { + is_ruler = yes + highest_held_title_tier >= tier_county + is_adult = yes + } + NOT = { + scope:recipient.top_liege ?= { + current_military_strength > scope:actor.current_military_strength + tier_difference = { + target = scope:actor + value >= -1 + } + } + } + } + NOT = { + scope:actor.faith = { has_doctrine_parameter = human_sacrifice_active } + } + add = 10 + } + #Boost further if actor if want to keep head + modifier = { + #want to keep head + scope:actor = { + mpo_keep_prisoners_heads_trigger = yes + } + scope:recipient = { + highest_held_title_tier >= tier_kingdom + is_adult = yes + } + NOT = { + scope:actor.faith = { has_doctrine_parameter = human_sacrifice_active } + } + add = 20 + } + #Boost further if actor wants to be scary + modifier = { + #want to keep head + scope:actor = { + mpo_keep_prisoners_heads_trigger = yes + scope:recipient = { + is_ruler = yes + highest_held_title_tier >= tier_county + is_adult = yes + } + OR = { + has_trait = conqueror + has_trait = greatest_of_khans + is_gurkhan = yes + } + } + NOT = { + scope:actor.faith = { has_doctrine_parameter = human_sacrifice_active } + } + add = 30 + } + modifier = { scope:recipient = { any_character_struggle = { @@ -6428,7 +6576,12 @@ execute_prisoner_interaction = { send_option = { is_shown = { - scope:actor.faith = scope:recipient.faith + OR = { + scope:actor.faith = scope:recipient.faith + scope:actor = { + mpo_keep_prisoners_heads_trigger = yes + } + } NOT = { scope:actor.faith = { has_doctrine_parameter = human_sacrifice_active } } @@ -6454,9 +6607,14 @@ execute_prisoner_interaction = { send_option = { is_shown = { - NOT = { - scope:actor.faith = scope:recipient.faith - scope:actor.faith = { has_doctrine_parameter = human_sacrifice_active } + NOR = { + AND = { + scope:actor.faith = scope:recipient.faith + scope:actor.faith = { has_doctrine_parameter = human_sacrifice_active } + } + scope:actor = { + mpo_keep_prisoners_heads_trigger = yes + } } } flag = execution_burned diff --git a/common/character_interactions/00_religious_interactions.txt b/common/character_interactions/00_religious_interactions.txt index d2cfe60f..ba84c031 100644 --- a/common/character_interactions/00_religious_interactions.txt +++ b/common/character_interactions/00_religious_interactions.txt @@ -788,6 +788,31 @@ demand_conversion_vassal_ruler_interaction = { is_valid_showing_failures_only = { valid_demand_conversion_conditions_trigger = yes + trigger_if = { + limit = { + scope:actor.domicile ?= { + domicile_uses_culture_and_faith = yes + } + scope:recipient = { + is_ruler = yes + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + custom_tooltip = { + text = nomads_must_inspire_tt + NOT = { + scope:recipient = { + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + } + } } auto_accept = { @@ -5169,6 +5194,28 @@ hof_ask_for_gold_interaction = { scope:influence_send_option = yes desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION } + + modifier = { + add = -25 + desc = BASE_RELUCTANCE + trigger = { + has_game_rule = hard_difficulty + scope:actor = { + is_ai = no + } + } + } + + modifier = { + add = -75 + desc = BASE_RELUCTANCE + trigger = { + has_game_rule = very_hard_difficulty + scope:actor = { + is_ai = no + } + } + } } auto_accept = { @@ -5351,11 +5398,11 @@ hof_ask_for_claim_interaction = { trigger_if = { # Admin can't request claim on other admin titles, only the top liege's primary title is up for grabs limit = { scope:secondary_recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = yes } scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative } } scope:target = { @@ -5426,11 +5473,11 @@ hof_ask_for_claim_interaction = { trigger_if = { # Admin can't request claims on other admin titles limit = { scope:secondary_recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { is_independent_ruler = yes } } scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative } } custom_description = { @@ -7094,3 +7141,125 @@ attempt_conversion_of_local_ruler_interaction = { religion_demand_conversion_default_modifier = yes } } + +######################### +# Exaltation of Pain tenet +######################### + +revel_in_pain_interaction = { + icon = religious + category = interaction_category_religion + desc = revel_in_pain_interaction_desc + + use_diplomatic_range = yes + + greeting = positive + notification_text = REVEL_IN_PAIN_INTERACTION_NOTIFICATION + + is_shown = { + NOT = { scope:actor = scope:recipient } + scope:actor = { + faith = { has_doctrine_parameter = self_mutilation_active } + OR = { + has_relation_friend = scope:recipient + has_relation_lover = scope:recipient + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + is_available = yes + custom_tooltip = { + text = actor_is_severely_injured_tt + NOT = { has_trait = wounded_2 } + } + } + scope:recipient = { + custom_tooltip = { + text = recipient_involved_in_revel_in_pain_recently_tt + NOT = { has_character_flag = involved_in_revel_in_pain_recently } + } + is_adult = yes + NOT = { has_trait = craven } + faith = { has_doctrine_parameter = self_mutilation_active } + NOT = { is_at_war_with = scope:actor } + custom_tooltip = { + text = recipient_is_severely_injured_tt + NOT = { has_trait = wounded_2 } + } + custom_tooltip = { + text = recipient_not_in_the_same_location_tt + location = scope:actor.location + } + is_available = yes + } + } + + auto_accept = { + scope:recipient = { is_ai = yes } + } + + on_accept = { + scope:actor = { + trigger_event = religious_interaction.2600 + show_as_tooltip = { revel_in_pain_effect = yes } + } + scope:recipient = { + if = { + limit = { is_ai = no } + trigger_event = religious_interaction.2600 + show_as_tooltip = { + revel_in_pain_effect = yes + revel_in_pain_opinion_effect = yes + } + } + else = { + revel_in_pain_effect = yes + revel_in_pain_opinion_effect = yes + } + } + } + + on_decline = { + scope:actor = { + trigger_event = religious_interaction.2610 + } + } + + ai_targets = { + ai_recipients = family + ai_recipients = scripted_relations + ai_recipients = vassals + ai_recipients = courtiers + max = 5 + } + + ai_frequency = 36 + + ai_potential = { + faith = { has_doctrine_parameter = self_mutilation_active } + is_at_war = no + OR = { + has_trait = zealous + has_trait = sadistic + } + NOR = { + has_trait = craven + has_trait = wounded_1 + has_trait = wounded_2 + } + } + + ai_will_do = { + base = 0 + modifier = { + add = ai_boldness + } + modifier = { + has_trait = flagellant + add = 25 + } + } +} diff --git a/common/character_interactions/00_revoke_title_interaction.txt b/common/character_interactions/00_revoke_title_interaction.txt index f6b15149..f90f2824 100644 --- a/common/character_interactions/00_revoke_title_interaction.txt +++ b/common/character_interactions/00_revoke_title_interaction.txt @@ -10,10 +10,10 @@ triggered_desc = { trigger = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative } scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative } } desc = revoke_governorship_interaction @@ -27,10 +27,10 @@ triggered_desc = { trigger = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative } scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative } } desc = revoke_governorship_interaction_desc @@ -42,10 +42,10 @@ icon = { trigger = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative } scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative } } reference = revoke_governorship @@ -72,6 +72,7 @@ is_shown = { scope:recipient = { + NOT = { government_has_flag = government_is_herder } # They have their own interaction without cooldowns/maluses is_landed_or_landless_administrative = yes # should be shown but be disabled for indirect vassals target_is_liege_or_above = scope:actor @@ -91,7 +92,7 @@ } } trigger_else_if = { - limit = { has_government = administrative_government } + limit = { government_has_flag = government_is_administrative } } trigger_else = { custom_description = { @@ -136,7 +137,7 @@ NOT = { has_strong_hook = scope:actor } trigger_if = { # If admin, they need to hold a title that isn't their noble family title limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } custom_tooltip = { text = admin_no_valid_appointment @@ -191,8 +192,8 @@ title_revocation_standard_can_pick_title_trigger = yes trigger_if = { limit = { - scope:actor = { has_government = administrative_government } - scope:recipient = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } + scope:recipient = { government_has_flag = government_is_administrative } } custom_description = { text = "admin_revoke_primary_tier_only" @@ -206,7 +207,10 @@ has_valid_target = { scope:target = { - NOT = { is_noble_family_title = yes } + NOR = { + is_noble_family_title = yes + is_nomad_title = yes + } } } @@ -246,7 +250,7 @@ if = { limit = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { has_revoke_title_reason = scope:recipient } } scope:recipient = { @@ -368,7 +372,7 @@ scope:actor = { if = { # Admin has to pay an influence cost unless they have a revocation reason on the recipient limit = { - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { has_revoke_title_reason = scope:recipient } scope:recipient = { highest_held_title_tier >= tier_county @@ -511,7 +515,7 @@ scope:actor = { if = { # Admin has to pay an influence cost unless they have a revocation reason on the recipient limit = { - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { has_revoke_title_reason = scope:recipient } scope:recipient = { highest_held_title_tier >= tier_county @@ -613,25 +617,45 @@ if = { limit = { scope:landed_title.tier != tier_barony + NOT = { + scope:recipient = { government_has_flag = government_is_herder } + } } scope:actor = { revocation_tyranny_effect = { VASSAL = scope:recipient } title_revocation_stress_effect = { VASSAL = scope:recipient } } } - war_for_revoke_effect = { - LIEGE = scope:actor - REBEL = scope:recipient + if = { + limit = { + scope:recipient = { government_has_flag = government_is_herder } + } + scope:recipient = { + add_opinion = { + target = scope:actor + opinion = -10 # Herders don't care much + modifier = revoked_title + } + } } - scope:recipient = { - add_opinion = { - target = scope:actor - modifier = revoked_title + else = { + war_for_revoke_effect = { + LIEGE = scope:actor + REBEL = scope:recipient + } + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = revoked_title + } } } if = { limit = { scope:actor = { has_realm_law_flag = vassal_refusal_is_treason } + NOT = { + scope:recipient = { government_has_flag = government_is_herder } + } } scope:actor = { add_opinion = { @@ -708,9 +732,9 @@ } custom_tooltip = { text = "has_admin_gov" - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative highest_held_title_tier = tier_county is_ai = yes } @@ -721,11 +745,45 @@ ai_accept = { base = 0 # Try to make it 0 for most interactions + modifier = { + has_game_rule = hard_difficulty + scope:actor = { is_ai = no } + add = -50 + desc = game_rule_base_value + } + + modifier = { + has_game_rule = very_hard_difficulty + scope:actor = { is_ai = no } + add = -100 + desc = game_rule_base_value + } + + modifier = { + has_game_rule = hard_difficulty + scope:actor = { is_ai = yes } + add = 50 + } + + modifier = { + has_game_rule = very_hard_difficulty + scope:actor = { is_ai = yes } + add = 100 + } + modifier = { scope:hook = yes add = 40 desc = SCHEME_WEAK_HOOK_USED } + + modifier = { + scope:recipient = { + government_has_flag = government_is_herder + } + add = 40 + desc = MIGRATION_INTERACTION_HERDER + } opinion_modifier = { # Opinion Factor who = scope:recipient @@ -829,7 +887,7 @@ } modifier = { #Title is part of vassal's primary title de-jure. Not relevant for Admin. add = -25 - NOT = { scope:recipient = { has_government = administrative_government } } + NOT = { scope:recipient = { government_has_flag = government_is_administrative } } scope:recipient.primary_title.tier > tier_county OR = { scope:recipient.primary_title = { @@ -1090,7 +1148,7 @@ } AND = { scope:actor = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } scope:landed_title.title_province = { has_holding_type = city_holding } } @@ -1204,7 +1262,7 @@ scope:landed_title.title_province = { has_holding_type = church_holding } } AND = { - scope:actor = { government_has_flag = government_is_republic } + scope:actor = { government_has_flag = government_is_special_republic } scope:landed_title.title_province = { has_holding_type = city_holding } } } @@ -1248,7 +1306,7 @@ # Slight preference for higher-tier titles modifier = { NOT = { - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } } add = scope:landed_title.tier } @@ -1346,18 +1404,18 @@ # Admin Government: Do not revoke titles from your house unless it's really needed modifier = { - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } scope:actor.house = scope:recipient.house add = -500 } # Admin rulers should be less likely to revoke titles without a revocation reason, as they should prefer to depose governors modifier = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { has_revoke_title_reason = scope:recipient } } scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative highest_held_title_tier >= tier_duchy } factor = { # Honorable AI's will never revoke titles without a reason @@ -1381,4 +1439,4 @@ factor = 0 } } -} +} \ No newline at end of file diff --git a/common/character_interactions/00_scheme_interactions.txt b/common/character_interactions/00_scheme_interactions.txt index 9de88f70..2283bae5 100644 --- a/common/character_interactions/00_scheme_interactions.txt +++ b/common/character_interactions/00_scheme_interactions.txt @@ -566,6 +566,56 @@ befriend_interaction = { } } + cost = { + prestige = { + value = 0 + if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + NOR = { + has_perk = befriend_perk + AND = { + exists = dynasty + dynasty = { + has_dynasty_perk = fp1_adventure_legacy_5 + } + target_is_vassal_or_below = scope:recipient + } + culture = { has_cultural_parameter = automatic_befriend_access } + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = struggle_unlocks_befriend_schemes_for_everyone + } + AND = { + government_has_flag = government_is_clan + is_in_same_clan_as_trigger = { CHARACTER = scope:recipient } + house = { has_house_unity_stage = harmonious } + } + } + } + } + add = scope:actor.minor_prestige_value + if = { + limit = { + scope:recipient = { + is_vassal_of = scope:actor + } + } + add = scope:actor.miniscule_prestige_value + } + if = { + limit = { + scope:actor = { + is_vassal_of = scope:recipient + } + } + add = scope:actor.minor_prestige_value + } + } + } + } + desc = { triggered_desc = { trigger = { @@ -2301,6 +2351,13 @@ sway_interaction = { primary_title.tier >= tier_kingdom } } + + modifier = { # Ignore neighboring Herders + factor = 0 + scope:recipient = { + government_has_flag = government_is_herder + } + } } } diff --git a/common/character_interactions/00_test_interactions.txt b/common/character_interactions/00_test_interactions.txt index ac7d29cc..1a473b70 100644 --- a/common/character_interactions/00_test_interactions.txt +++ b/common/character_interactions/00_test_interactions.txt @@ -1066,7 +1066,7 @@ start_diarchy_interaction = { } } on_accept = { - scope:recipient = { start_diarchy = regency } + scope:recipient = { try_start_diarchy = regency } } auto_accept = yes diff --git a/common/character_interactions/00_tradition_interactions.txt b/common/character_interactions/00_tradition_interactions.txt index a4f1022f..98fb43a8 100644 --- a/common/character_interactions/00_tradition_interactions.txt +++ b/common/character_interactions/00_tradition_interactions.txt @@ -220,7 +220,7 @@ appoint_podesta_interaction = { is_ai = yes is_landed = yes target_is_liege_or_above = scope:actor - NOT = { government_has_flag = government_is_republic } + NOT = { government_has_flag = government_is_special_republic } } } @@ -235,7 +235,7 @@ appoint_podesta_interaction = { any_vassal = { count < 4 #Use Script Value highest_held_title_tier >= tier_county - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } @@ -243,7 +243,7 @@ appoint_podesta_interaction = { scope:recipient = { target_is_liege_or_above = scope:actor - NOT = { government_has_flag = government_is_republic } + NOT = { government_has_flag = government_is_special_republic } is_claimant = no custom_description = { @@ -337,7 +337,7 @@ appoint_podesta_interaction = { } every_vassal = { limit = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } every_held_title = { change_title_holder = { @@ -362,7 +362,7 @@ appoint_podesta_interaction = { } every_vassal = { limit = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } every_held_title = { change_title_holder = { diff --git a/common/character_interactions/00_tribal_interactions.txt b/common/character_interactions/00_tribal_interactions.txt index 8888106c..9f6744a6 100644 --- a/common/character_interactions/00_tribal_interactions.txt +++ b/common/character_interactions/00_tribal_interactions.txt @@ -1,9 +1,9 @@ -feudalize_tribal_holding_interaction = { +feudalize_holding_interaction = { category = interaction_category_uncategorized hidden = yes - special_interaction = feudalize_tribal_holding + special_interaction = feudalize_holding - desc = feudalize_tribal_holding_interaction_desc + desc = feudalize_holding_interaction_desc target_type = title target_filter = actor_domain_titles @@ -13,7 +13,11 @@ is_shown = { scope:actor = { this = scope:recipient - NOT = { government_has_flag = government_is_tribal } + NOR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } } } @@ -24,12 +28,16 @@ trigger_if = { limit = { tier <= tier_county } title_province = { - has_holding_type = tribal_holding + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } } } trigger_else = { custom_description = { - text = "feudalize_tribal_holding_interaction_title_not_county_or_below" + text = "feudalize_holding_interaction_title_not_county_or_below" always = no } } @@ -51,16 +59,40 @@ cost = { gold = { scope:actor = { - add = { - value = feudalize_tribal_holding_interaction_cost - desc = BASE + if = { + limit = { + scope:target.county = { + has_variable = was_razed + } + } + add = { + value = 50 + desc = BASE + } + } + else_if = { + limit = { + scope:target.county = { + culture = scope:actor.culture + } + } + add = { + value = 200 + desc = BASE + } + } + else = { + add = { + value = feudalize_holding_interaction_cost + desc = BASE + } } if = { limit = { # More expensive for admin to make barbarians civilized... government_has_flag = government_is_administrative } add = { - value = feudalize_tribal_holding_interaction_cost + value = feudalize_holding_interaction_cost multiply = 0.25 desc = has_admin_government } @@ -72,7 +104,7 @@ } } subtract = { - value = feudalize_tribal_holding_interaction_cost + value = feudalize_holding_interaction_cost multiply = { value = 0.1 if = { @@ -94,20 +126,273 @@ scope:actor = { send_interface_toast = { type = event_toast_effect_good - title = feudalize_tribal_holding_interaction_notification + title = feudalize_holding_interaction_notification right_icon = scope:actor + if = { + limit = { + scope:target.title_province = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + if = { + limit = { + OR = { + scope:target.county.culture = scope:actor.culture + scope:target.county = { + has_variable = was_razed + } + } + } + } + else_if = { + limit = { + OR = { + government_has_flag = government_is_tribal + scope:target.county.culture = { has_same_culture_heritage = scope:actor.culture } + } + } + scope:target.county = { + add_county_modifier = { + modifier = mpo_feudalize_nomadic_land_modifier + years = 5 + } + } + } + else = { + scope:target.county = { + add_county_modifier = { + modifier = mpo_feudalize_nomadic_land_modifier + years = 30 + } + } + } + } + if = { limit = { exists = scope:target.title_province } scope:target.title_province = { set_holding_type = castle_holding } } + + if = { + limit = { + scope:target = { + title_province = { + geographical_region = geographical_region:mpo_region_permafrost + } + } + } + if = { + limit = { + scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier } + } + remove_county_modifier = mpo_siberian_permafrost_modifier + } + else_if = { + limit = { + scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier_bad } + } + remove_county_modifier = mpo_siberian_permafrost_modifier_bad + } + } } } } + # Interaction frequency determined by code, do not change + ai_frequency = 0 + + # Used to determine which holding should be feudalized over another AND how important this AI goal is compared to others, like creating titles and constructing new holdings + ai_will_do = { + base = 1500 + } +} + +tribalize_holding_interaction = { + category = interaction_category_uncategorized + hidden = yes + special_interaction = tribalize_holding + + desc = tribalize_holding_interaction_desc + + target_type = title + target_filter = actor_domain_titles + + auto_accept = yes + + is_shown = { + scope:actor = { + this = scope:recipient + government_has_flag = government_is_tribal + } + } + + can_be_picked_title = { + scope:target = { + holder = scope:actor + is_capital_barony = no # we'll use the county in that case + trigger_if = { + limit = { tier <= tier_county } + title_province = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + trigger_else = { + custom_description = { + text = "feudalize_holding_interaction_title_not_county_or_below" + always = no + } + } + } + } + + has_valid_target_showing_failures_only = { + scope:target = { + trigger_if = { + limit = { tier <= tier_county } + title_province = { + barony_controller = scope:actor + has_ongoing_construction = no + } + } + } + } + + cost = { + gold = { + scope:actor = { + if = { + limit = { + scope:target.county = { + has_variable = was_razed + } + } + add = { + value = 15 + desc = BASE + } + } + else = { + add = { + value = 50 + desc = BASE + } + } + } + } + prestige = { + scope:actor = { + if = { + limit = { + scope:target.county = { + has_variable = was_razed + } + } + add = { + value = 25 + desc = BASE + } + } + else_if = { + limit = { + scope:target.county.culture = scope:actor.culture + } + add = { + value = 50 + desc = BASE + } + } + else_if = { + limit = { + scope:target.county.culture = { has_same_culture_heritage = scope:actor.culture } + } + add = { + value = 100 + desc = BASE + } + } + else = { + add = { + value = 300 + desc = BASE + } + } + } + } + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = feudalize_holding_interaction_notification + + right_icon = scope:actor + + if = { + limit = { + OR = { + scope:target.county.culture = scope:actor.culture + scope:target.county = { + has_variable = was_razed + } + } + } + } + else = { + scope:target.county = { + add_county_modifier = { + modifier = mpo_feudalize_nomadic_land_modifier + years = 5 + } + } + } + + if = { + limit = { exists = scope:target.title_province } + scope:target.title_province = { + set_holding_type = tribal_holding + } + } + + if = { + limit = { + scope:target = { + title_province = { + geographical_region = geographical_region:mpo_region_permafrost + } + } + } + if = { + limit = { + scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier } + } + remove_county_modifier = mpo_siberian_permafrost_modifier + } + else_if = { + limit = { + scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier_bad } + } + remove_county_modifier = mpo_siberian_permafrost_modifier_bad + } + } + } + } + } + + # Interaction frequency determined by code, do not change + ai_frequency = 0 + + # Used to determine which holding should be feudalized over another AND how important this AI goal is compared to others, like creating titles and constructing new holdings ai_will_do = { base = 1500 } @@ -176,7 +461,7 @@ support_feudalize_tribal_holding_interaction = { gold = { scope:actor = { add = { - value = feudalize_tribal_holding_interaction_cost + value = feudalize_holding_interaction_cost desc = BASE } if = { @@ -184,7 +469,7 @@ support_feudalize_tribal_holding_interaction = { government_has_flag = government_is_administrative } add = { - value = feudalize_tribal_holding_interaction_cost + value = feudalize_holding_interaction_cost multiply = 0.25 desc = has_admin_government } @@ -196,7 +481,7 @@ support_feudalize_tribal_holding_interaction = { } } subtract = { - value = feudalize_tribal_holding_interaction_cost + value = feudalize_holding_interaction_cost multiply = { value = 0.1 if = { @@ -218,7 +503,7 @@ support_feudalize_tribal_holding_interaction = { # Highlight the interaction if we have the gold to spare scope:actor = { gold >= { - value = feudalize_tribal_holding_interaction_cost + value = feudalize_holding_interaction_cost if = { limit = { # More expensive for admin to convert these... Barbarians... government_has_flag = government_is_administrative @@ -245,7 +530,7 @@ support_feudalize_tribal_holding_interaction = { scope:actor = { send_interface_toast = { type = event_toast_effect_good - title = feudalize_tribal_holding_interaction_notification + title = feudalize_holding_interaction_notification left_icon = scope:actor right_icon = scope:target @@ -281,7 +566,7 @@ support_feudalize_tribal_holding_interaction = { is_at_war = no is_adult = yes # The AI only does this if they have plenty of gold to spare - gold >= { value = feudalize_tribal_holding_interaction_cost multiply = 4 } + gold >= { value = feudalize_holding_interaction_cost multiply = 4 } # Warring AI don't do this - They want to spend their gold on war! ai_has_warlike_personality = no ai_has_conqueror_personality = no diff --git a/common/character_interactions/00_tributary_interactions.txt b/common/character_interactions/00_tributary_interactions.txt new file mode 100644 index 00000000..fda1cab8 --- /dev/null +++ b/common/character_interactions/00_tributary_interactions.txt @@ -0,0 +1,2320 @@ +#Interactions relating to tributary relationship management + +### Become Tributary - bilateral +# actor = offerer / potential tributary +# recipient = receiver / potential suzerain + +become_tributary_interaction = { + category = interaction_category_diplomacy + common_interaction = no + icon = become_tributary_interaction + + desc = become_tributary_interaction_desc + + is_shown = { + scope:actor = { + NOT = { government_has_flag = cannot_be_vassal_or_liege } + is_independent_ruler = yes # You have to be independent - This check exists to prevent a lot of edge-cases where you can change liege + is_tributary = no + highest_held_title_tier >= tier_county + trigger_if = { + limit = { + is_ai = yes + } + current_military_strength < scope:recipient.one_and_a_half_times_current_military_strength + primary_title.tier < scope:recipient.primary_title.tier + } + } + scope:recipient = { + is_independent_ruler = yes # while it's possible for tributaries to have their own tributaries, it should not be possible to create a tributary relationship with a non-independent ruler + NOT = { + this = scope:actor + top_suzerain = scope:actor + } + can_have_tributaries_trigger = yes + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_physically_able = yes + is_travelling = no + NOT = { exists = involved_activity } + is_confederation_member = no + is_at_war = no + } + } + + greeting = positive + notification_text = BECOME_TRIBUTARY_INTERACTION_NOTIFICATION + + # Low starting obligations + send_option = { + flag = low_obligations + localization = low_tributary_obligations + } + + # Medium starting obligations + send_option = { + flag = normal_obligations + localization = normal_tributary_obligations + starts_enabled = { always = yes } + + } + + # High starting obligations + send_option = { + flag = high_obligations + localization = high_tributary_obligations + } + + send_options_exclusive = yes + + on_accept = { + start_tributary_interaction_effect = { + TRIBUTARY = scope:actor + SUZERAIN = scope:recipient + } + scope:actor = { + trigger_event = char_interaction.0360 + } + scope:recipient = { + if = { + limit = { scope:high_obligations = yes } + add_opinion = { + modifier = tributary_volunteered_opinion + target = scope:actor + opinion = 20 + } + } + else_if = { + limit = { scope:normal_obligations = yes } + add_opinion = { + modifier = tributary_volunteered_opinion + target = scope:actor + } + } + + consume_all_criminal_reasons_effect = { + LIEGE = scope:recipient + CRIMINAL = scope:actor + } + } + } + + on_decline = { + scope:actor = { + trigger_event = char_interaction.0361 + } + } + + ai_potential = { + highest_held_title_tier >= tier_county + is_independent_ruler = yes + } + + ai_targets = { + ai_recipients = neighboring_rulers_including_tributary_borders + } + + ai_targets = { + ai_recipients = neighboring_top_overlords_connected_by_land + } + + ai_frequency = 6 # this might appear fairly frequent but is necessary in order to ensure AI can respond to sudden threats on their borders + + force_notification = yes + + ai_will_do = { + base = -50 + ai_military_threat_modifier_with_cbs = { + SENDER = scope:actor + RECEIVER = scope:recipient + MULTIPLIER = -1 + } + + modifier = { + is_obedient_to = scope:recipient + add = 40 + desc = obedient_interaction_reason + } + + modifier = { # Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:actor = { + has_relation_rival = scope:recipient + NOT = { has_relation_nemesis = scope:recipient } + } + } + add = -10 + } + modifier = { # Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:actor = { + has_relation_nemesis = scope:recipient + } + } + add = -30 + } + modifier = { # Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Of two different faiths AND the potential vassal's faith is not pluralistic. + faith = scope:recipient.faith + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + } + add = { + value = -25 + if = { + limit = { + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_evil_level + } + } + } + add = -25 + } + } + } + modifier = { # I am a King! + desc = offer_fealty_interaction_aibehavior_amkingtier_tt + trigger = { + highest_held_title_tier >= tier_kingdom + } + add = -20 + } + + modifier = { # Cultural Acceptance + add = -5 + desc = cultural_acceptance_interaction_reason + trigger = { + scope:actor = { + NOT = { has_same_culture_as = scope:recipient } + culture = { + cultural_acceptance = { target = scope:recipient.culture value < 50 } + } + } + } + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + } + + ai_min_reply_days = 5 + ai_max_reply_days = 10 + + ai_accept = { + base = -50 + + modifier = { + desc = interaction_is_nomadic + scope:recipient = { + government_has_flag = government_is_nomadic + } + add = 100 + } + + modifier = { # Wide difference in rank + desc = offer_vassalization_interaction_aibehavior_widetitletier_tt + trigger = { + scope:actor = { + tier_difference = { + target = scope:recipient + value > 1 + } + } + } + add = 20 + } + modifier = { # Distant Realm. + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:actor = { + NOT = { + any_neighboring_top_liege_realm_owner = { this = scope:recipient } + } + } + scope:actor.capital_province = { squared_distance = { target = scope:recipient.capital_province value < 200000 } } + } + add = -15 + } + modifier = { # Remote Realm. + desc = offer_vassalization_interaction_aibehavior_remoterealm_tt + trigger = { + scope:actor = { + NOT = { + any_neighboring_top_liege_realm_owner = { this = scope:recipient } + } + } + scope:actor.capital_province = { squared_distance = { target = scope:recipient.capital_province value >= 200000 } } + } + add = -25 + } + + # MINOR + modifier = { # Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -10 + } + modifier = { # Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -30 + } + modifier = { # Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + trigger = { + scope:recipient = { + dynasty = scope:actor.dynasty + } + } + add = 10 + } + + # PERSONALITY + ai_value_modifier = { + ai_greed = 0.75 + min = 0 + } + + # OPINION INFLUENCE + opinion_modifier = { # Compare Opinion modifier. + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + } + + # CONTRACT OPTIONS + modifier = { + add = -25 + scope:low_obligations = yes + desc = CONTRACT_LOW_TAXES_REASON + } + modifier = { + add = 25 + scope:high_obligations = yes + desc = CONTRACT_HIGH_TAXES_REASON + } + } +} + +### Demand Tributary - bilateral +# actor = offerer / potential suzerain +# recipient = receiver / potential tributary + +demand_tributary_interaction = { + category = interaction_category_diplomacy + common_interaction = yes + icon = demand_tributary_interaction + + desc = demand_tributary_interaction_desc + + is_shown = { + scope:actor = { + NOT = { + this = scope:recipient + top_suzerain = scope:recipient.top_suzerain # ensures the actor and recipient is not already in the same "suzerain bloc" + } + can_get_tributaries_peacefully_trigger = yes + + trigger_if = { + limit = { + is_ai = yes + } + current_military_strength >= scope:recipient.one_and_a_half_times_current_military_strength + primary_title.tier >= scope:recipient.primary_title.tier + } + } + scope:recipient = { + highest_held_title_tier >= tier_county + is_independent_ruler = yes # target cannot be a vassal + NOT = { government_has_flag = cannot_be_vassal_or_liege } + } + # Temujin cannot make Jamukha his subject once he leaves him + NOT = { + scope:actor = { + has_variable = had_mpo_temujin_flavor_0010 + var:had_mpo_temujin_flavor_0010 ?= scope:recipient + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + NOT = { has_truce = scope:actor } + is_physically_able = yes + is_travelling = no + NOT = { exists = involved_activity } + } + scope:recipient = { + is_tributary = no + is_at_war = no + custom_tooltip = { + text = demand_tributary_interaction_cooldown_active_tt + NOT = { + has_opinion_modifier = { + modifier = tributary_demanded_opinion + target = scope:actor + } + } + } + is_confederation_member = no + } + scope:actor = { + custom_tooltip = { + text = mpo_interaction_not_neighbouring_tt + any_land_neighboring_realm_with_tributaries_owner = { + this = scope:recipient + } + } + } + } + + cost = { + prestige = minor_prestige_value + } + + greeting = positive + notification_text = DEMAND_TRIBUTARY_INTERACTION_NOTIFICATION + + on_accept = { + start_tributary_interaction_effect = { + TRIBUTARY = scope:recipient + SUZERAIN = scope:actor + } + scope:actor = { + trigger_event = char_interaction.0362 + } + scope:recipient = { + add_opinion = { + modifier = tributary_demanded_opinion # this opinion also acts as a built-in cooldown + target = scope:actor + } + } + consume_all_criminal_reasons_effect = { + LIEGE = scope:actor + CRIMINAL = scope:recipient + } + } + + on_decline = { + scope:actor = { + trigger_event = char_interaction.0363 + } + scope:recipient = { + add_opinion = { + modifier = tributary_demanded_opinion # this opinion also acts as a built-in cooldown + target = scope:actor + } + custom_tooltip = demand_tributary_interaction_cooldown_tt + } + } + + ai_maybe = yes + + ai_potential = { + highest_held_title_tier > 1 # at least a count-level ruler + is_independent_ruler = yes + } + + ai_targets = { + ai_recipients = neighboring_rulers_including_tributary_borders + max = 5 + } + + ai_frequency = 4 + + force_notification = yes + + ai_will_do = { # AI will often do this to valid targets that aren't a military threat to them, especially if they're rich + base = 0 + + modifier = { + add = { + add = scope:recipient.gold + divide = 10 + max = 100 + } + desc = accumulated_wealth_reason + } + + ai_military_threat_modifier_with_cbs = { + SENDER = scope:actor + RECEIVER = scope:recipient + MULTIPLIER = -1 + } + + modifier = { + scope:recipient = { is_obedient_to = scope:actor } + add = 40 + desc = obedient_interaction_reason + } + + modifier = { # Generally don't try to tributarize those of higher rank than you + trigger = { + "scope:recipient.tier_difference(scope:actor)" > 1 + } + add = -20 + } + + modifier = { # Generally don't try to tributarize those of higher dominance than you + trigger = { + scope:recipient.dominance_value > scope:actor.dominance_value + } + add = -30 + } + + modifier = { # Remote Realm. + trigger = { + scope:actor = { + NOT = { + any_neighboring_top_liege_realm_owner = { this = scope:recipient } + } + } + scope:actor.capital_province = { squared_distance = { target = scope:recipient.capital_province value >= 200000 } } + } + add = -25 + } + + modifier = { + trigger = { + scope:recipient = { government_has_flag = government_is_herder } + } + add = 1000 + } + } + + ai_min_reply_days = 5 + ai_max_reply_days = 10 + + auto_accept = { + custom_tooltip = { + text = scheme_agent_aptitude.is_herder + scope:recipient = { government_has_flag = government_is_herder } + } + } + + ai_accept = { + base = -60 + + modifier = { # Perk boost + desc = offer_vassalization_true_ruler_perk_tt + trigger = { + scope:actor = { has_perk = true_ruler_perk } + } + add = true_ruler_value + } + + #Yurt bonuses + modifier = { + desc = tributary_yurt_02_domicile_building + trigger = { + scope:actor.domicile ?= { has_domicile_parameter = nomad_yurt_increased_tributary_acceptance_lvl_1 } + } + add = 5 + } + + modifier = { + desc = tributary_yurt_02_domicile_building + trigger = { + scope:actor.domicile ?= { has_domicile_parameter = nomad_yurt_increased_tributary_acceptance_lvl_2 } + } + add = 10 + } + + modifier = { + desc = tributary_yurt_02_domicile_building + trigger = { + scope:actor.domicile ?= { has_domicile_parameter = nomad_yurt_increased_tributary_acceptance_lvl_3 } + } + add = 15 + } + + modifier = { # the bolder they are, the less likely they will agree to this and vice versa + NOT = { ai_boldness = 0 } + add = { + value = ai_boldness + multiply = -1 + divide = 2 + } + desc = TRIBUTARY_BOLDNESS_REASON + } + + modifier = { # the greedier they are, the less likely they will agree to this + ai_greed > 0 + add = { + value = ai_greed + multiply = -1 + divide = 4 + } + desc = TRIBUTARY_GREED_REASON + } + + modifier = { + is_obedient_to = scope:actor + add = 40 + desc = obedient_interaction_reason + } + + modifier = { + scope:actor = { is_gurkhan = yes } + scope:recipient = { government_has_flag = government_is_nomadic } + add = 20 + desc = gurkhan_interaction_reason + } + + # Easier to make Tributaries during the Zud season + modifier = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_easier_tributaries + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + scope:recipient = { government_has_flag = government_is_nomadic } + add = 25 + desc = zud_season_reason + } + + # if the actor is a major threat to the recipient they're more likely to accept + ai_military_threat_modifier_with_cbs = { + SENDER = scope:recipient + RECEIVER = scope:actor + MULTIPLIER = 1 + } + + modifier = { # They are a King + desc = demand_tributary_interaction_aibehavior_hightier_tt + trigger = { + scope:recipient = { highest_held_title_tier = tier_kingdom } + } + add = -100 + } + + modifier = { # They are an Emperor or greater + desc = demand_tributary_interaction_aibehavior_hightier_tt + trigger = { + scope:recipient = { highest_held_title_tier >= tier_empire } + } + add = -200 + } + + modifier = { # Recipient has higher Dominance than the actor + desc = demand_tributary_interaction_aibehavior_dominance_tt + trigger = { + scope:recipient.dominance_value > scope:actor.dominance_value + } + add = -20 + } + + modifier = { # Actor has higher Dominance than the recipient + desc = demand_tributary_interaction_aibehavior_dominance_tt + trigger = { + scope:recipient = { government_has_flag = government_is_nomadic } + scope:actor.dominance_value > scope:recipient.dominance_value + } + add = 20 + } + + # Legitimacy + modifier = { + desc = "LOW_LEGITIMACY_REASON" + scope:actor = { + has_legitimacy_flag = very_reduced_tributarization_acceptance + } + add = -25 + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + scope:actor = { + has_legitimacy_flag = reduced_tributarization_acceptance + } + add = -10 + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + scope:actor = { + has_legitimacy_flag = increased_tributarization_acceptance + } + add = 10 + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + scope:actor = { + has_legitimacy_flag = very_increased_tributarization_acceptance + } + add = 25 + } + + # Non-nomadic + modifier = { + desc = AI_FILTHY_HORSE_LORD_REASON + trigger = { + scope:actor = { government_has_flag = government_is_nomadic } + scope:recipient = { + NOT = { government_has_flag = government_is_nomadic } + } + } + add = { + value = -50 + if = { + limit = { + scope:recipient = { government_has_flag = government_is_tribal } + } + multiply = 0.5 + } + } + } + + # MINOR + modifier = { # Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -100 + } + modifier = { # Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -200 + } + modifier = { # Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + trigger = { + scope:recipient = { + dynasty = scope:actor.dynasty + } + } + add = 10 + } + modifier = { # Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOT = { # faith condition below doesn't have to apply if both actor and recipient have nomadic_philosophy + has_trait = nomadic_philosophy + scope:recipient = { has_trait = nomadic_philosophy } + } + faith = { + NOR = { # Of two different faiths AND the potential vassal's faith is not pluralistic + this = scope:recipient.faith + has_doctrine = doctrine_pluralism_pluralistic + } + } + } + } + add = { + value = -25 + if = { + limit = { + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_evil_level + } + } + } + add = -25 + } + } + } + + modifier = { # Encircled + desc = offer_vassalization_interaction_aibehavior_encircled_tt + trigger = { + scope:recipient = { + NOT = { + any_neighboring_top_suzerain_realm_owner = { + NOT = { + this = scope:actor + } + } + } + NOT = { + any_realm_county = { + is_coastal_county = yes + } + } + } + } + add = 30 + } + + modifier = { # Cultural Acceptance + add = -5 + desc = cultural_acceptance_interaction_reason + trigger = { + scope:actor = { + NOT = { # cultural condition below doesn't have to apply if both actor and recipient have nomadic_philosophy + has_trait = nomadic_philosophy + scope:recipient = { has_trait = nomadic_philosophy } + } + NOT = { has_same_culture_as = scope:recipient } + culture = { + cultural_acceptance = { target = scope:recipient.culture value < 50 } + } + } + } + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + # OPINION INFLUENCE + opinion_modifier = { # Compare Opinion modifier. + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + } + + #Severed head acceptance + modifier = { + add = 200 + scope:actor = { + has_variable = severed_head_vassalization + var:severed_head_vassalization = { + this = scope:recipient + } + } + } + } +} + + + +### Cease Paying Tribute - unilateral +### Name referenced in code! Don't change it without an adult present! +# actor = tributary +# recipient = suzerain + +cease_paying_tribute_interaction = { + category = interaction_category_diplomacy + common_interaction = yes + use_diplomatic_range = no + icon = cease_paying_tributary_interaction + + desc = cease_paying_tribute_interaction_desc + + is_shown = { + scope:actor = { + this != scope:recipient + suzerain = scope:recipient + subject_can_break_tributary = yes + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_physically_able = yes + is_travelling = no + NOT = { exists = involved_activity } + trigger_if = { + limit = { + OR = { + any_land_neighboring_realm_with_tributaries_owner = { + this = scope:recipient + } + scope:recipient = { + is_landed = no + } + } + } + NOT = { has_truce = scope:recipient } + } + } + } + + cost = { + prestige = { + value = 0 + if = { + limit = { + scope:actor = { + OR = { + any_land_neighboring_realm_with_tributaries_owner = { + this = scope:recipient + } + scope:recipient = { + is_landed = no + } + } + } + } + add = minor_prestige_value + } + } + } + + auto_accept = yes + on_accept = { + scope:actor = { + end_tributary = yes + } + scope:recipient = { + if = { + limit = { is_ai = yes } + trigger_event = { + id = char_interaction.0370 + days = 14 # we delay the response from the AI for 2 weeks to make it feel more like a "diplomacy response" + } + } + else = { + trigger_event = char_interaction.0370 + } + add_opinion = { + modifier = tributary_ceased_payments_opinion + target = scope:actor + } + } + } + + ai_potential = { + is_at_war = no + is_migrating = no + suzerain ?= { + is_migrating = no + + OR = { + is_landed = no + NOT = { # disconnected tributaries can always do this, even herders + any_land_neighboring_realm_with_tributaries_owner = { + this = root + } + } + AND = { + NOT = { root = { government_has_flag = government_is_herder } } + trigger_if = { # Obedience is a hard blocker, but only if suzerain is landed + limit = { + is_landed = yes + } + root = { is_obedient = no } + } + } + } + } + } + + ai_targets = { + ai_recipients = suzerain + } + + ai_frequency = 12 # this must be 12 (1 year) in order to ensure the integrity of the UI-visualized chance the tributary will break the contract + + # visualized in the UI as the annual chance the tributary will break the contract, based on a percentage chance per year + ai_will_do = { + base = -25 + + modifier = { + add = { + add = obedience_value + subtract = obedience_threshold + multiply = -1 + max = obedience_threshold + min = { + value = obedience_threshold + multiply = -1 + } + } + desc = obedience_value_reason + } + + modifier = { + scope:recipient = { + has_variable = temp_tributary_protection + } + add = -150 + desc = temp_tributary_protection_reason + } + + modifier = { + dominance_value > suzerain.dominance_value + add = 30 + desc = cease_tribute_higher_dominance_reason + } + + modifier = { + suzerain = { + any_memory = { + has_memory_type = nomad_showed_weakness_in_war + memory_age_years < 5 + } + } + add = 30 + desc = cease_tribute_showed_weakness_in_war_reason + } + + modifier = { + any_memory = { + has_memory_type = suzerain_defended_me_in_war + has_memory_participant = root.suzerain + memory_age_years < 10 + } + add = -100 + desc = cease_tribute_defended_me_in_war_reason + } + + modifier = { + suzerain = { + any_memory = { + has_memory_type = had_chaotic_kurultai_succession + memory_age_years < 5 + } + } + add = 30 + desc = cease_tribute_had_chaotic_kurultai_succession_reason + } + + # if the actor is sufficiently scared of the recipient they're way less likely to do this + ai_military_threat_modifier = { + SENDER = scope:actor + RECEIVER = scope:recipient + MULTIPLIER = -2.5 + } + + modifier = { + scope:actor = { + is_migrating = no + } + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + this = scope:actor + } + } + } + add = 1000 + desc = cease_tribute_disconnected_suzerain + } + + modifier = { + scope:recipient = { + is_landed = no + is_migrating = no + is_at_war = no + } + add = 10000 + desc = cease_tribute_landless_suzerain + } + } +} + +### Release Tributary - unilateral +# actor = suzerain +# recipient = tributary + +release_tributary_interaction = { + category = interaction_category_diplomacy + common_interaction = no + icon = release_tributary_interaction + + desc = release_tributary_interaction_desc + + is_shown = { + scope:recipient = { + this != scope:actor + suzerain = scope:actor + OR = { # AI should only ever consider releasing unruly subjects + scope:actor = { is_ai = no } + NOT = { is_obedient_to = scope:actor } + } + } + } + + is_valid_showing_failures_only = {} + + cost = { + prestige = minor_prestige_value + } + + auto_accept = yes + on_accept = { + add_truce_one_way = { + character = scope:recipient + years = 5 + name = TRUCE_TRIBUTARY_RELEASED + } + scope:recipient = { + end_tributary = yes + save_scope_as = tributary_loc + scope:actor = { save_scope_as = suzerain_loc } + add_truce_both_ways = { + character = scope:actor + years = 5 + name = TRUCE_TRIBUTARY_STOPPED + } + add_opinion = { + target = scope:actor + modifier = tributary_released_opinion + opinion = 25 + } + trigger_event = char_interaction.0380 + } + scope:actor = { + #TODO_CD_MPO some sort of message here + } + } +} + +### Release as Tributary - unilateral +# actor = suzerain +# recipient = tributary + +release_as_tributary_interaction = { + category = interaction_category_vassal + common_interaction = no + icon = release_as_tributary + interface_priority = 4 + + desc = release_as_tributary_interaction_desc + + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + } + scope:recipient = { + is_vassal_of = scope:actor + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_independent_ruler = yes + is_at_war = no + } + } + + auto_accept = yes + + on_accept = { + scope:actor = { + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_neutral + title = release_as_tributary_interaction_toast + left_icon = scope:actor + right_icon = scope:recipient + + custom_tooltip = release_as_tributary_interaction_toast_desc + } + } + } + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = granted_independence_opinion + opinion = 10 + } + create_title_and_vassal_change = { + type = independency + save_scope_as = change + add_claim_on_loss = yes + } + becomes_independent = { + change = scope:change + } + + resolve_title_and_vassal_change = scope:change + } + start_tributary_interaction_effect = { + SUZERAIN = scope:actor + TRIBUTARY = scope:recipient + } + } + + ai_potential = { + government_has_flag = government_is_nomadic + this = top_liege + vassal_count > vassal_limit + } + + ai_targets = { + ai_recipients = vassals + } + + ai_frequency = 12 + + ai_will_do = { + base = 0 + modifier = { + scope:recipient = { # Only on your borders + any_held_title = { + tier = tier_county + any_neighboring_county = { + OR = { + is_coastal_county = yes + holder.top_liege != scope:recipient.top_liege + } + } + } + } + add = 100 + } + } +} + +# Offer Courtier +offer_courtier_interaction = { + category = interaction_category_diplomacy + common_interaction = no + icon = courtier_interaction + interface_priority = 40 + + desc = offer_courtier_interaction_desc + + ai_targets = { + ai_recipients = suzerain + ai_recipients = liege + ai_recipients = scripted_relations + max = 5 + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency = 36 + + greeting = positive + notification_text = OFFER_COURTIER_NOTIFICATION + + needs_recipient_to_open = yes + + populate_actor_list = { + scope:actor = { + every_courtier = { + limit = { + is_available_healthy_ai_adult = yes + NOR = { + is_consort_of = scope:actor + is_heir_of = scope:actor + AND = { + is_female = yes + patrilinear_marriage = yes + } + AND = { + is_male = yes + matrilinear_marriage = yes + } + is_diarch = yes + is_designated_diarch = yes + has_character_flag = has_been_offered_as_concubine + } + } + add_to_list = characters + } + } + } + + is_shown = { + scope:actor != scope:recipient + scope:recipient = { + is_ruler = yes + NOT = { government_has_flag = government_is_herder } + } + } + + is_valid_showing_failures_only = { + custom_tooltip = { + text = offer_courtier_valid_courtier_tt + scope:actor = { + any_courtier = { + is_available_healthy_ai_adult = yes + NOR = { + is_consort_of = scope:actor + is_heir_of = scope:actor + AND = { + is_female = yes + patrilinear_marriage = yes + } + AND = { + is_male = yes + matrilinear_marriage = yes + } + } + } + } + } + } + + can_be_picked = { + is_adult = yes + } + + can_send = { + custom_tooltip = { + text = no_heirs_can_be_sent_tt + scope:secondary_actor = { + NOT = { + is_heir_of = scope:actor + } + } + } + custom_tooltip = { + text = no_spouses_can_be_sent_tt + scope:secondary_actor = { + NOT = { + is_consort_of = scope:actor + } + } + } + } + + auto_accept = no + + ai_accept = { + base = -10 + + modifier = { + add = 100 + scope:secondary_actor = { + OR = { + sum_of_all_skills_value >= sum_of_all_skills_threshold_good + martial >= monumentally_high_skill_rating + prowess >= extremely_high_skill_rating + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_chancellor ?= { diplomacy < monumentally_high_skill_rating } + } + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_steward ?= { stewardship < monumentally_high_skill_rating } + } + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_spymaster ?= { intrigue < monumentally_high_skill_rating } + } + has_relation_lover = scope:recipient # Shhh, don't tell anyone, of course you're 'skilled'! + trigger_if = { + limit = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + OR = { + AND = { + sum_of_all_skills_value >= sum_of_all_skills_threshold_average + scope:recipient = { + any_courtier = { + count < 10 + } + } + } + aptitude:master_of_hunt_court_position >= 4 + aptitude:keeper_of_the_horses_court_position >= 4 + aptitude:boyan_court_position >= 4 + aptitude:siege_engineer_court_position >= 4 + aptitude:yurtchi_court_position >= 4 + aptitude:cherbi_court_position >= 4 + aptitude:yeke_jarquchi_court_position >= 4 + aptitude:foreign_emissary_court_position >= 4 + } + } + } + } + desc = AI_INTERESTING_COURTIER_REASON + } + + modifier = { + add = 100 + scope:secondary_actor.prowess >= decent_skill_rating + scope:recipient.number_of_knights < scope:recipient.max_number_of_knights + desc = AI_KNIGHT_REASON + } + + modifier = { + add = 100 + exists = scope:secondary_actor.inspiration + desc = AI_INSPIRED_REASON + } + + modifier = { + add = 100 + scope:secondary_actor = { + is_close_or_extended_family_of = scope:recipient + } + desc = AI_FAMILY_REASON + } + + modifier = { + add = 100 + scope:secondary_actor = { + is_consort_of = scope:recipient + } + desc = AI_SPOUSE_REASON + } + + modifier = { + add = 100 + scope:secondary_actor = { + has_relation_friend = scope:recipient + } + desc = AI_FRIEND_REASON + } + + modifier = { + add = -200 + scope:secondary_actor = { + has_relation_rival = scope:recipient + } + desc = AI_RIVAL_REASON + } + + modifier = { + add = 100 + scope:recipient = { + any_courtier = { + is_consort_of = scope:secondary_actor + } + } + desc = AI_SPOUSE_OF_COURTIER_REASON + } + + modifier = { + add = 100 + scope:recipient = { + any_courtier = { + count < 5 + } + } + desc = AI_LACK_COURTIERS_REASON + } + } + + ai_potential = { + OR = { + ai_greed <= 25 + is_obedient = yes + } + OR = { + is_tributary = yes + num_of_relation_friend > 0 + num_of_relation_lover > 0 + } + } + + ai_will_do = { + base = 0 + + modifier = { + add = 100 + scope:recipient = { + OR = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + } + } + } + + modifier = { + add = 100 + scope:recipient = { + is_tributary_of = scope:actor + OR = { + ai_greed <= -50 + is_obedient_to = scope:actor + opinion = { + target = scope:actor + value >= 50 + } + } + } + } + + modifier = { + factor = 0 + scope:secondary_actor = { + OR = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + } + } + } + + modifier = { + factor = 0 + scope:actor = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + scope:secondary_actor = { + is_close_or_extended_family_of = scope:actor + } + } + + modifier = { # The AI only offers really good characters + factor = 0 + scope:secondary_actor = { + NOR = { + sum_of_all_skills_value >= sum_of_all_skills_threshold_good + martial >= monumentally_high_skill_rating + prowess >= extremely_high_skill_rating + exists = inspiration + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_chancellor ?= { diplomacy < monumentally_high_skill_rating } + } + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_steward ?= { stewardship < monumentally_high_skill_rating } + } + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_spymaster ?= { intrigue < monumentally_high_skill_rating } + } + trigger_if = { + limit = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + OR = { + AND = { + sum_of_all_skills_value >= sum_of_all_skills_threshold_average + scope:recipient = { + any_courtier = { + count < 10 + } + } + } + aptitude:master_of_hunt_court_position >= 4 + aptitude:keeper_of_the_horses_court_position >= 4 + aptitude:boyan_court_position >= 4 + aptitude:siege_engineer_court_position >= 4 + aptitude:yurtchi_court_position >= 4 + aptitude:cherbi_court_position >= 4 + aptitude:yeke_jarquchi_court_position >= 4 + aptitude:foreign_emissary_court_position >= 4 + } + } + } + } + } + } + + on_send = { + scope:secondary_actor = { # to block the same character from being offered twice + add_character_flag = { + flag = has_been_offered_as_concubine + days = 5 + } + } + } + + on_accept = { + scope:secondary_actor = { + add_opinion = { + target = scope:recipient + modifier = piqued_opinion + opinion = 10 + } + } + scope:recipient = { + add_courtier = scope:secondary_actor + scope:secondary_actor = { + every_consort = { + limit = { + is_courtier_of = scope:actor + } + scope:recipient = { + add_courtier = prev + } + } + every_child = { + limit = { + is_adult = no + is_courtier_of = scope:recipient + } + scope:actor = { + add_courtier = prev + } + } + } + add_opinion = { + target = scope:actor + modifier = grateful_opinion + opinion = 10 + } + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = msg_courtier_offer_rejected_title + right_icon = scope:recipient + left_icon = scope:secondary_actor + custom_tooltip = msg_courtier_offer_rejected + } + } + } +} + +# Demand Courtier +demand_courtier_interaction = { + category = interaction_category_vassal + common_interaction = yes + icon = request_courtier_interaction + interface_priority = 45 + + desc = demand_courtier_interaction_desc + + ai_targets = { + ai_recipients = tributaries + ai_recipients = vassals + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency = 12 + cooldown_against_recipient = { years = 3 } + + greeting = positive + notification_text = DEMAND_COURTIER_NOTIFICATION + + highlighted_reason = HIGHLIGHTED_SKILLED_COURTIER + is_highlighted = { + scope:recipient = { + any_courtier = { + is_available_healthy_ai_adult = yes + NOR = { + is_consort_of = scope:recipient + is_heir_of = scope:recipient + AND = { + is_female = yes + patrilinear_marriage = yes + } + AND = { + is_male = yes + matrilinear_marriage = yes + } + is_diarch = yes + is_designated_diarch = yes + has_character_flag = has_been_offered_as_concubine + } + OR = { + sum_of_all_skills_value >= sum_of_all_skills_threshold_good + martial >= monumentally_high_skill_rating + prowess >= extremely_high_skill_rating + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_chancellor ?= { diplomacy < monumentally_high_skill_rating } + } + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_steward ?= { stewardship < monumentally_high_skill_rating } + } + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_spymaster ?= { intrigue < monumentally_high_skill_rating } + } + trigger_if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + } + } + OR = { + aptitude:master_of_hunt_court_position >= 4 + aptitude:keeper_of_the_horses_court_position >= 4 + aptitude:boyan_court_position >= 4 + aptitude:siege_engineer_court_position >= 4 + aptitude:yurtchi_court_position >= 4 + aptitude:cherbi_court_position >= 4 + aptitude:yeke_jarquchi_court_position >= 4 + aptitude:foreign_emissary_court_position >= 4 + } + } + } + } + } + } + + needs_recipient_to_open = yes + + populate_actor_list = { + scope:recipient = { + every_courtier = { + limit = { + is_available_healthy_ai_adult = yes + NOR = { + is_consort_of = scope:recipient + is_heir_of = scope:recipient + AND = { + is_female = yes + patrilinear_marriage = yes + } + AND = { + is_male = yes + matrilinear_marriage = yes + } + is_diarch = yes + is_designated_diarch = yes + has_character_flag = has_been_offered_as_concubine + } + } + add_to_list = characters + } + } + } + + is_shown = { + scope:actor != scope:recipient + scope:recipient = { + OR = { + trigger_if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + } + } + is_vassal_of = scope:actor + } + is_tributary_of = scope:actor + } + } + } + + is_valid_showing_failures_only = { + custom_tooltip = { + text = demand_courtier_valid_courtier_tt + scope:recipient = { + any_courtier = { + is_available_healthy_ai_adult = yes + NOR = { + is_consort_of = scope:recipient + is_heir_of = scope:recipient + AND = { + is_female = yes + patrilinear_marriage = yes + } + AND = { + is_male = yes + matrilinear_marriage = yes + } + } + } + } + } + } + + can_be_picked = { + is_adult = yes + } + + can_send = { + } + + auto_accept = no + + ai_accept = { + base = 0 + + modifier = { + add = 1000 + scope:recipient = { + is_obedient_to = scope:actor + } + desc = AI_OBEDIENT_REASON + } + + modifier = { + add = 25 + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + + modifier = { + add = 50 + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 1.0 + desc = AI_OPINION_REASON + } + + modifier = { + add = -25 + scope:secondary_actor = { + OR = { + is_councillor = yes + has_any_court_position = yes + } + } + desc = AI_EMPLOYED_COURTIER_REASON + } + + modifier = { + add = -15 + scope:secondary_actor = { + is_knight = yes + } + desc = AI_IS_KNIGHT_REASON + } + + modifier = { + add = -50 + exists = scope:secondary_actor.inspiration + desc = AI_INSPIRED_REASON + } + + modifier = { + add = -25 + scope:secondary_actor = { + is_close_or_extended_family_of = scope:recipient + } + desc = AI_FAMILY_REASON + } + + modifier = { + add = -50 + scope:secondary_actor = { + has_relation_friend = scope:recipient + } + desc = AI_FRIEND_REASON + } + + modifier = { + add = 1000 + scope:secondary_actor = { + has_relation_rival = scope:recipient + } + desc = AI_RIVAL_REASON + } + } + + ai_potential = { + ai_greed >= 0 + any_tributary = { } + } + + ai_will_do = { + base = 0 + + modifier = { + add = 100 + scope:secondary_actor = { + OR = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + sum_of_all_skills_value >= sum_of_all_skills_threshold_good + martial >= monumentally_high_skill_rating + prowess >= extremely_high_skill_rating + exists = inspiration + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_chancellor ?= { diplomacy < monumentally_high_skill_rating } + } + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_steward ?= { stewardship < monumentally_high_skill_rating } + } + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_spymaster ?= { intrigue < monumentally_high_skill_rating } + } + trigger_if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + } + } + OR = { + AND = { + sum_of_all_skills_value >= sum_of_all_skills_threshold_average + scope:actor = { + any_courtier = { + count < 10 + } + } + } + aptitude:master_of_hunt_court_position >= 4 + aptitude:keeper_of_the_horses_court_position >= 4 + aptitude:boyan_court_position >= 4 + aptitude:siege_engineer_court_position >= 4 + aptitude:yurtchi_court_position >= 4 + aptitude:cherbi_court_position >= 4 + aptitude:yeke_jarquchi_court_position >= 4 + aptitude:foreign_emissary_court_position >= 4 + } + } + } + } + } + + modifier = { + factor = 0 + scope:recipient = { + OR = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + } + } + } + } + + on_send = { + scope:secondary_actor = { # to block the same character from being offered twice + add_character_flag = { + flag = has_been_offered_as_concubine + days = 5 + } + } + } + + on_accept = { + scope:secondary_actor = { + add_opinion = { + target = scope:recipient + modifier = annoyed_opinion + opinion = -10 + } + } + scope:actor = { + add_courtier = scope:secondary_actor + scope:secondary_actor = { + every_consort = { + limit = { + is_courtier_of = scope:recipient + } + scope:actor = { + add_courtier = prev + } + } + every_child = { + limit = { + is_adult = no + is_courtier_of = scope:recipient + } + scope:actor = { + add_courtier = prev + } + } + } + add_opinion = { + target = scope:recipient + modifier = pleased_opinion + opinion = 20 + } + } + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = upset_opinion + opinion = -15 + } + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = msg_courtier_demand_rejected_title + right_icon = scope:recipient + left_icon = scope:secondary_actor + custom_tooltip = msg_courtier_demand_rejected + } + } + scope:actor = { + add_opinion = { + target = scope:recipient + modifier = upset_opinion + opinion = -15 + } + } + } +} + +# Demand Concubine +demand_concubine_interaction = { + category = interaction_category_vassal + common_interaction = yes + icon = request_concubine_interaction + interface_priority = 44 + + desc = demand_concubine_interaction_desc + + ai_targets = { + ai_recipients = tributaries + ai_recipients = vassals + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency = 12 + cooldown_against_recipient = { years = 3 } + + greeting = positive + notification_text = DEMAND_CONCUBINE_NOTIFICATION + + needs_recipient_to_open = yes + + populate_actor_list = { + scope:recipient = { + every_courtier = { + limit = { + is_physically_able_adult = yes + is_ruler = no + could_marry_character_trigger = { CHARACTER = scope:actor } + } + add_to_list = characters + } + } + } + + is_shown = { + scope:actor != scope:recipient + scope:actor = { + allowed_concubines = yes + } + scope:recipient = { + OR = { + trigger_if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + } + } + is_vassal_of = scope:actor + } + is_tributary_of = scope:actor + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + allowed_more_concubines = yes + is_physically_able_adult = yes + } + custom_tooltip = { + text = must_have_valid_concubine_tt + scope:recipient = { + any_courtier = { + is_physically_able_adult = yes + is_ruler = no + could_marry_character_trigger = { CHARACTER = scope:actor } + } + } + } + } + + can_be_picked = { + is_adult = yes + } + + can_send = { + } + + auto_accept = no + + ai_accept = { + base = 0 + + modifier = { + add = 1000 + scope:recipient = { + is_obedient_to = scope:actor + } + desc = AI_OBEDIENT_REASON + } + + modifier = { + add = 25 + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + + modifier = { + add = 50 + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 1.0 + desc = AI_OPINION_REASON + } + + modifier = { + add = -25 + scope:secondary_actor = { + OR = { + is_councillor = yes + has_any_court_position = yes + } + } + desc = AI_EMPLOYED_COURTIER_REASON + } + + modifier = { + add = -15 + scope:secondary_actor = { + is_knight = yes + } + desc = AI_IS_KNIGHT_REASON + } + + modifier = { + add = -50 + exists = scope:secondary_actor.inspiration + desc = AI_INSPIRED_REASON + } + + modifier = { + add = -25 + scope:secondary_actor = { + is_close_or_extended_family_of = scope:recipient + } + desc = AI_FAMILY_REASON + } + + modifier = { + add = -50 + scope:secondary_actor = { + has_relation_friend = scope:recipient + } + desc = AI_FRIEND_REASON + } + + modifier = { + add = -50 + scope:secondary_actor = { + is_consort_of = scope:recipient + } + desc = AI_SPOUSE_REASON + } + + modifier = { + add = -50 + scope:secondary_actor = { + is_child_of = scope:recipient + } + desc = AI_CHILD_REASON + } + + modifier = { + add = 1000 + scope:secondary_actor = { + has_relation_rival = scope:recipient + } + desc = AI_RIVAL_REASON + } + } + + ai_potential = { + OR = { + has_trait = lustful + ai_honor <= 0 + } + any_tributary = { } + } + + ai_will_do = { + base = 0 + + modifier = { + add = 100 + scope:secondary_actor = { + OR = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + sum_of_all_skills_value >= sum_of_all_skills_threshold_good + martial >= monumentally_high_skill_rating + prowess >= extremely_high_skill_rating + exists = inspiration + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_chancellor ?= { diplomacy < monumentally_high_skill_rating } + } + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_steward ?= { stewardship < monumentally_high_skill_rating } + } + AND = { + diplomacy >= monumentally_high_skill_rating + scope:actor.cp:councillor_spymaster ?= { intrigue < monumentally_high_skill_rating } + } + has_conventionally_attractive_trigger = yes + num_of_good_genetic_traits > 1 + } + } + } + + modifier = { + factor = 0 + scope:recipient = { + OR = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + } + } + } + + modifier = { + factor = 0 + scope:secondary_actor = { + OR = { + has_conventionally_ugly_trigger = yes + age >= 30 + is_visibly_fertile = no + } + } + } + } + + on_send = { + scope:secondary_actor = { # to block the same character from being offered twice + add_character_flag = { + flag = has_been_offered_as_concubine + days = 5 + } + } + } + + on_accept = { + scope:recipient = { + if = { + limit = { + scope:secondary_actor = { + NOR = { + is_consort_of = scope:recipient + is_close_or_extended_family_of = scope:recipient + } + } + } + add_opinion = { + target = scope:actor + modifier = upset_opinion + opinion = -15 + } + } + else = { + scope:secondary_actor = { save_scope_as = relationship_reason_involved_character } + progress_towards_rival_effect = { + REASON = rival_demanded_concubine + CHARACTER = scope:actor + OPINION = 0 + } + add_opinion = { + target = scope:actor + modifier = upset_opinion + opinion = -50 + } + clear_saved_scope = secondary_actor + } + } + demand_concubine_interaction_on_accept_effect = yes + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = msg_concubine_demand_rejected_title + right_icon = scope:recipient + left_icon = scope:secondary_actor + custom_tooltip = msg_courtier_demand_rejected + } + } + scope:actor = { + add_opinion = { + target = scope:recipient + modifier = upset_opinion + opinion = -15 + } + } + } +} diff --git a/common/character_interactions/00_vassal_interactions.txt b/common/character_interactions/00_vassal_interactions.txt index 0f512fd4..f8fcfd46 100644 --- a/common/character_interactions/00_vassal_interactions.txt +++ b/common/character_interactions/00_vassal_interactions.txt @@ -145,7 +145,7 @@ grant_vassal_interaction = { subject = root trigger_if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } any_held_title = { is_noble_family_title = no @@ -250,6 +250,30 @@ grant_vassal_interaction = { log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_grants_vassal_to_de_jure_liege_supporter_detractor } } } + if = { + limit = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + while = { + limit = { + scope:secondary_actor ?= { + any_held_title = { + vassal_grant_de_jure_shift_trigger = yes + } + } + } + scope:secondary_actor ?= { + random_held_title = { + limit = { + vassal_grant_de_jure_shift_trigger = yes + } + set_de_jure_liege_title = scope:recipient.primary_title + } + } + } + } } } @@ -477,6 +501,32 @@ retract_vassal_interaction = { ai_accept = { base = 0 # Try to make it 0 for most interactions + modifier = { + has_game_rule = hard_difficulty + scope:actor = { is_ai = no } + add = -50 + desc = FACTION_REASON_DIFFICULTY_HARD + } + + modifier = { + has_game_rule = very_hard_difficulty + scope:actor = { is_ai = no } + add = -100 + desc = FACTION_REASON_DIFFICULTY_VERY_HARD + } + + modifier = { + has_game_rule = hard_difficulty + scope:actor = { is_ai = yes } + add = 50 + } + + modifier = { + has_game_rule = very_hard_difficulty + scope:actor = { is_ai = yes } + add = 100 + } + modifier = { scope:hook = yes add = 40 @@ -1232,7 +1282,7 @@ create_claimant_faction_against_interaction = { # Admin vassals can only start and join a claimant faction if the target is independent trigger_if = { limit = { - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } } scope:secondary_actor = { is_independent_ruler = yes } } @@ -1501,6 +1551,7 @@ force_onto_council = { OR = { has_usable_hook = scope:recipient vassal_contract_has_flag = can_demand_council_seat + vassal_contract_has_flag = can_demand_kurultai_seat } } is_adult = yes @@ -1541,7 +1592,10 @@ force_onto_council = { scope:actor = { if = { limit = { - NOT = { vassal_contract_has_flag = can_demand_council_seat } + NOR = { + vassal_contract_has_flag = can_demand_council_seat + vassal_contract_has_flag = can_demand_kurultai_seat + } } save_scope_value_as = { name = used_hook @@ -1607,6 +1661,9 @@ force_onto_council = { trigger = { exists = scope:recipient.council_task:councillor_chancellor can_be_chancellor_trigger = { COURT_OWNER = scope:recipient } + scope:recipient = { + NOT = { vassal_contract_has_flag = can_demand_kurultai_seat } + } } modifier = { factor = diplomacy @@ -1623,6 +1680,9 @@ force_onto_council = { trigger = { exists = scope:recipient.council_task:councillor_steward can_be_steward_trigger = { COURT_OWNER = scope:recipient } + scope:recipient = { + NOT = { vassal_contract_has_flag = can_demand_kurultai_seat } + } } modifier = { factor = stewardship @@ -1639,6 +1699,9 @@ force_onto_council = { trigger = { exists = scope:recipient.council_task:councillor_marshal can_be_marshal_trigger = { COURT_OWNER = scope:recipient } + scope:recipient = { + NOT = { vassal_contract_has_flag = can_demand_kurultai_seat } + } } modifier = { factor = martial @@ -1655,6 +1718,9 @@ force_onto_council = { trigger = { exists = scope:recipient.council_task:councillor_spymaster can_be_spymaster_trigger = { COURT_OWNER = scope:recipient } + scope:recipient = { + NOT = { vassal_contract_has_flag = can_demand_kurultai_seat } + } } modifier = { factor = intrigue @@ -1671,6 +1737,9 @@ force_onto_council = { trigger = { exists = scope:recipient.council_task:councillor_court_chaplain can_be_court_chaplain_trigger = { COURT_OWNER = scope:recipient } + scope:recipient = { + NOT = { vassal_contract_has_flag = can_demand_kurultai_seat } + } } modifier = { factor = learning @@ -1683,6 +1752,104 @@ force_onto_council = { save_scope_as = target } } + # Kurultai Demanded + 10 = { + trigger = { + exists = scope:recipient.council_task:councillor_kurultai_1 + can_be_kurultai_trigger = { + COURT_OWNER = scope:actor.liege_or_court_owner + CP1 = councillor_kurultai_2 + CP2 = councillor_kurultai_3 + CP3 = councillor_kurultai_4 + } + scope:recipient = { + NOT = { vassal_contract_has_flag = can_demand_council_seat } + } + } + modifier = { + factor = martial + } + modifier = { + trigger = { highest_skill = martial } + factor = 10 + } + scope:recipient.council_task:councillor_kurultai_1 = { + save_scope_as = target + } + } + # Repeated so they don't always demand the same position + 10 = { + trigger = { + exists = scope:recipient.council_task:councillor_kurultai_2 + can_be_kurultai_trigger = { + COURT_OWNER = scope:actor.liege_or_court_owner + CP1 = councillor_kurultai_1 + CP2 = councillor_kurultai_3 + CP3 = councillor_kurultai_4 + } + scope:recipient = { + NOT = { vassal_contract_has_flag = can_demand_council_seat } + } + } + modifier = { + factor = martial + } + modifier = { + trigger = { highest_skill = martial } + factor = 10 + } + scope:recipient.council_task:councillor_kurultai_2 = { + save_scope_as = target + } + } + 10 = { + trigger = { + exists = scope:recipient.council_task:councillor_kurultai_3 + can_be_kurultai_trigger = { + COURT_OWNER = scope:actor.liege_or_court_owner + CP1 = councillor_kurultai_1 + CP2 = councillor_kurultai_2 + CP3 = councillor_kurultai_4 + } + scope:recipient = { + NOT = { vassal_contract_has_flag = can_demand_council_seat } + } + } + modifier = { + factor = martial + } + modifier = { + trigger = { highest_skill = martial } + factor = 10 + } + scope:recipient.council_task:councillor_kurultai_3 = { + save_scope_as = target + } + } + 10 = { + trigger = { + exists = scope:recipient.council_task:councillor_kurultai_4 + can_be_kurultai_trigger = { + COURT_OWNER = scope:actor.liege_or_court_owner + CP1 = councillor_kurultai_1 + CP2 = councillor_kurultai_2 + CP3 = councillor_kurultai_3 + } + scope:recipient = { + NOT = { vassal_contract_has_flag = can_demand_council_seat } + } + } + modifier = { + factor = martial + } + modifier = { + trigger = { highest_skill = martial } + factor = 10 + } + scope:recipient.council_task:councillor_kurultai_4 = { + save_scope_as = target + } + } } } } @@ -2316,8 +2483,9 @@ pardon_interaction = { send_interface_toast = { type = event_toast_effect_neutral - title = pardon_interaction_toast - left_icon = scope:actor + title = pardon_interaction_toast_title + desc = pardon_interaction_toast + right_icon = scope:actor } } @@ -2905,7 +3073,7 @@ give_vassal_directive_interaction = { scope:recipient = { trigger_if = { limit = { - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } } is_vassal_or_below_of = scope:actor } @@ -2913,6 +3081,7 @@ give_vassal_directive_interaction = { is_vassal_of = scope:actor } is_landed = yes + NOT = { government_has_flag = government_is_herder } highest_held_title_tier >= tier_county is_ai = yes } @@ -2931,7 +3100,7 @@ give_vassal_directive_interaction = { flag = improve_development is_shown = { scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative } } is_valid = { @@ -2945,7 +3114,7 @@ give_vassal_directive_interaction = { flag = train_commanders is_shown = { scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative } } is_valid = { @@ -2956,7 +3125,7 @@ give_vassal_directive_interaction = { flag = build_maa is_shown = { scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative } } is_valid = { @@ -2966,6 +3135,9 @@ give_vassal_directive_interaction = { send_option = { flag = convert_faith is_shown = { + scope:recipient = { + NOT = { government_has_flag = government_is_nomadic } + } } is_valid = { scope:recipient = { @@ -2982,6 +3154,9 @@ give_vassal_directive_interaction = { send_option = { flag = convert_culture is_shown = { + scope:recipient = { + NOT = { government_has_flag = government_is_nomadic } + } } is_valid = { scope:recipient = { @@ -2998,6 +3173,9 @@ give_vassal_directive_interaction = { send_option = { flag = improve_cultural_acceptance is_shown = { + scope:recipient = { + NOT = { government_has_flag = government_is_nomadic } + } } is_valid = { scope:recipient = { @@ -3015,6 +3193,9 @@ give_vassal_directive_interaction = { send_option = { flag = building_focus_fortification is_shown = { + scope:recipient = { + NOT = { government_has_flag = government_is_nomadic } + } } is_valid = { } @@ -3023,6 +3204,9 @@ give_vassal_directive_interaction = { send_option = { flag = building_focus_military is_shown = { + scope:recipient = { + NOT = { government_has_flag = government_is_nomadic } + } } is_valid = { } @@ -3031,11 +3215,71 @@ give_vassal_directive_interaction = { send_option = { flag = building_focus_economy is_shown = { + scope:recipient = { + NOT = { government_has_flag = government_is_nomadic } + } } is_valid = { } } - + + send_option = { + flag = manage_fertility + is_shown = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + is_valid = { + } + } + send_option = { + flag = explore_cultures + is_shown = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + is_valid = { + scope:recipient = { + custom_tooltip = { + text = subrealm_has_county_of_other_culture + any_sub_realm_county = { + NOT = { culture = scope:recipient.culture } + } + } + } + } + } + send_option = { + flag = raid_innovation_intent + is_shown = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + is_valid = { + custom_tooltip = { + text = has_any_directive + scope:recipient = { + NOT = { + has_character_flag = vassal_directive_raid_innovation_intent + } + } + } + } + } + send_option = { + flag = raid_herd_intent + is_shown = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + is_valid = { + } + } + send_option = { flag = remove_directive is_shown = { @@ -3054,6 +3298,10 @@ give_vassal_directive_interaction = { has_character_flag = vassal_directive_building_focus_fortification has_character_flag = vassal_directive_building_focus_military has_character_flag = vassal_directive_building_focus_economy + has_character_flag = vassal_directive_manage_fertility + has_character_flag = vassal_directive_explore_cultures + has_character_flag = vassal_directive_raid_innovation_intent + has_character_flag = vassal_directive_raid_herd_intent } } } @@ -3062,6 +3310,29 @@ give_vassal_directive_interaction = { on_accept = { scope:recipient = { + if = { + limit = { + OR = { + has_character_flag = vassal_directive_improve_development + has_character_flag = vassal_directive_train_commanders + has_character_flag = vassal_directive_build_maa + has_character_flag = vassal_directive_convert_faith + has_character_flag = vassal_directive_convert_culture + has_character_flag = vassal_directive_improve_cultural_acceptance + has_character_flag = vassal_directive_building_focus_fortification + has_character_flag = vassal_directive_building_focus_military + has_character_flag = vassal_directive_building_focus_economy + has_character_flag = vassal_directive_manage_fertility + has_character_flag = vassal_directive_explore_cultures + has_character_flag = vassal_directive_raid_innovation_intent + has_character_flag = vassal_directive_raid_herd_intent + } + } + custom_tooltip = { + text = vassal_directive_remove_directive + remove_vassal_directives = yes + } + } switch = { trigger = yes @@ -3136,6 +3407,35 @@ give_vassal_directive_interaction = { add_character_flag = vassal_directive_building_focus_economy } } + + scope:manage_fertility ?= { + custom_tooltip = { + text = vassal_directive_manage_fertility + remove_vassal_directives = yes + add_character_flag = vassal_directive_manage_fertility + } + } + scope:explore_cultures ?= { + custom_tooltip = { + text = vassal_directive_explore_cultures + remove_vassal_directives = yes + add_character_flag = vassal_directive_explore_cultures + } + } + scope:raid_innovation_intent ?= { + custom_tooltip = { + text = vassal_directive_raid_innovation_intent + remove_vassal_directives = yes + add_character_flag = vassal_directive_raid_innovation_intent + } + } + scope:raid_herd_intent ?= { + custom_tooltip = { + text = vassal_directive_raid_herd_intent + remove_vassal_directives = yes + add_character_flag = vassal_directive_raid_herd_intent + } + } scope:remove_directive ?= { custom_tooltip = { @@ -3148,7 +3448,7 @@ give_vassal_directive_interaction = { } ai_potential = { - has_government = administrative_government + government_has_flag = government_is_administrative highest_held_title_tier >= tier_kingdom } ai_targets = { @@ -3332,6 +3632,12 @@ grant_court_position = { scope:recipient.liege ?= scope:actor } + is_valid_showing_failures_only = { + scope:recipient = { + NOT = { is_imprisoned_by = scope:actor } + } + } + on_accept = { scope:actor = { appoint_court_position = { diff --git a/common/character_interactions/00_war.txt b/common/character_interactions/00_war.txt index 48d900d8..26cd8458 100644 --- a/common/character_interactions/00_war.txt +++ b/common/character_interactions/00_war.txt @@ -27,8 +27,25 @@ scope:actor = { NOT = { has_trait = incapable } can_attack_in_hierarchy = scope:recipient - NOT = { - has_raised_armies = yes + trigger_if = { + limit = { + NOT = { + government_has_flag = can_start_war_with_raised_troops + } + } + NOT = { + has_raised_armies = yes + } + } + trigger_else = { + custom_description = { + text = army_blocks_defender_army + NOT = { + any_army = { + location.county.holder ?= scope:recipient + } + } + } } has_any_display_cb_on = scope:recipient NOT = { @@ -76,8 +93,13 @@ } } } - scope:recipient = { NOT = { has_strong_hook = scope:actor } } scope:recipient = { + custom_tooltip = { + text = is_a_herder_recipient_tt + NOT = { government_has_flag = government_is_herder } # herders can't fight + } + NOT = { is_tributary_of_suzerain_or_above = scope:actor } # can't fight your tributaries or your tributaries' tributaries + NOT = { has_strong_hook = scope:actor } trigger_if = { limit = { is_imprisoned = yes } NOT = { @@ -88,7 +110,7 @@ scope:actor = { trigger_if = { limit = { - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } liege ?= { has_realm_law_flag = vassal_all_wars_banned_permanent NOT = { this = scope:actor } @@ -101,9 +123,9 @@ } trigger_if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative top_liege = scope:recipient.top_liege - scope:recipient = { has_government = administrative_government } + scope:recipient = { government_has_flag = government_is_administrative } NOT = { top_liege = scope:recipient } } custom_tooltip = { @@ -113,7 +135,7 @@ } trigger_if = { # Admin - Laws only allow frontier and naval themes to declare war limit = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = no top_liege = { this != scope:recipient.top_liege @@ -130,7 +152,7 @@ } trigger_if = { # Admin - Laws only allow frontier and naval themes to declare war IF they have permission limit = { - has_government = administrative_government + government_has_flag = government_is_administrative OR = { vassal_contract_has_flag = admin_theme_frontier vassal_contract_has_flag = admin_theme_naval @@ -148,7 +170,7 @@ } trigger_if = { # Admin - Laws prevent all vassals from declaring war limit = { - has_government = administrative_government + government_has_flag = government_is_administrative OR = { vassal_contract_has_flag = admin_theme_frontier vassal_contract_has_flag = admin_theme_naval @@ -178,6 +200,18 @@ } } } + trigger_if = { + limit = { + scope:actor = { + is_confederation_member = yes + } + } + NOT = { + scope:recipient = { + is_member_of_confederation = scope:actor.confederation + } + } + } } has_valid_target_showing_failures_only = { @@ -580,7 +614,15 @@ end_war_attacker_victory_interaction = { OR = { attacker_war_score >= 100 AND = { - attacker_war_score >= 90 + OR = { + attacker_war_score >= 90 + AND = { + attacker_war_score >= 80 + root = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + } + } + } root = { has_perk = peacemaker_perk } @@ -588,6 +630,37 @@ end_war_attacker_victory_interaction = { is_ai = yes } } + AND = { + OR = { + attacker_war_score >= 90 + AND = { + attacker_war_score >= 80 + root = { + has_perk = peacemaker_perk + } + } + } + root = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + } + primary_defender = { + is_ai = yes + } + } + #SENT A SCARY SEVERED HEAD AAAAHHH + AND = { + attacker_war_score >= 70 + primary_defender = { + is_ai = yes + save_temporary_scope_as = defender + } + root = { + has_variable = peace_acceptance_head_scare + var:peace_acceptance_head_scare = { + this = scope:defender + } + } + } primary_defender = { is_ai = yes ai_has_conqueror_personality = yes @@ -605,19 +678,59 @@ end_war_attacker_victory_interaction = { OR = { attacker_war_score >= 100 AND = { - attacker_war_score >= 90 - scope:actor = { + OR = { + attacker_war_score >= 90 + AND = { + attacker_war_score >= 80 + root = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + } + } + } + root = { has_perk = peacemaker_perk } primary_defender = { is_ai = yes } } + AND = { + OR = { + attacker_war_score >= 90 + AND = { + attacker_war_score >= 80 + root = { + has_perk = peacemaker_perk + } + } + } + root = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + } + primary_defender = { + is_ai = yes + } + } + #SENT A SCARY SEVERED HEAD AAAAHHH + AND = { + attacker_war_score >= 70 + primary_defender = { + is_ai = yes + save_temporary_scope_as = defender + } + root = { + has_variable = peace_acceptance_head_scare + var:peace_acceptance_head_scare = { + this = scope:defender + } + } + } AND = { NOR = { using_cb = undirected_great_holy_war using_cb = mongol_invasion_war using_cb = mongol_realm_invasion_war + using_cb = mpo_gok_onslaught_cb } primary_defender = { is_ai = yes @@ -658,6 +771,36 @@ end_war_attacker_victory_interaction = { desc = "PEACEMAKER_PERK_MODIFIER" } + modifier = { + scope:war.casus_belli = { + primary_attacker = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + NOT = { this = scope:recipient } + } + } + + add = 10 + + desc = "NOMAD_LEGACY_PERK_MODIFIER" + } + modifier = { + scope:war.casus_belli = { + primary_defender = { + save_temporary_scope_as = defender + } + primary_attacker = { + has_variable = peace_acceptance_head_scare + var:peace_acceptance_head_scare = { + this = scope:defender + } + } + primary_defender = { + is_ai = yes + } + } + add = 30 + desc = "COWED_BY_SEVERED_HEAD_MODIFIER" + } # Hostages modifier = { @@ -1536,6 +1679,72 @@ end_war_attacker_white_peace_interaction = { desc = "PEACEMAKER_PERK_MODIFIER" } + modifier = { + trigger = { + scope:war.casus_belli = { + primary_defender = scope:recipient + primary_attacker = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + } + } + } + add = 10 + + desc = "NOMAD_LEGACY_PERK_MODIFIER" + } + modifier = { + trigger = { + scope:war.casus_belli = { + primary_attacker = scope:recipient + primary_defender = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + } + } + } + add = 10 + + desc = "NOMAD_LEGACY_PERK_MODIFIER" + } + modifier = { + trigger = { + scope:war.casus_belli = { + primary_attacker = scope:recipient + primary_attacker = { + is_ai = yes + save_temporary_scope_as = attacker + } + primary_defender = { + has_variable = peace_acceptance_head_scare + var:peace_acceptance_head_scare = { + this = scope:attacker + } + } + } + } + add = 30 + + desc = "COWED_BY_SEVERED_HEAD_MODIFIER" + } + modifier = { + trigger = { + scope:war.casus_belli = { + primary_defender = scope:recipient + primary_defender = { + is_ai = yes + save_temporary_scope_as = defender + } + primary_attacker = { + has_variable = peace_acceptance_head_scare + var:peace_acceptance_head_scare = { + this = scope:defender + } + } + } + } + add = 30 + + desc = "COWED_BY_SEVERED_HEAD_MODIFIER" + } # Cultural Traditions modifier = { @@ -1809,17 +2018,50 @@ end_war_attacker_defeat_interaction = { OR = { defender_war_score >= 100 AND = { - defender_war_score >= 90 - root = { - OR = { - has_perk = peacemaker_perk - culture = { - has_cultural_parameter = can_end_defensive_wars_earlier + OR = { + attacker_war_score >= 90 + AND = { + attacker_war_score >= 80 + root = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } } } } + root = { + has_perk = peacemaker_perk + } + primary_defender = { + is_ai = yes + } + } + AND = { + OR = { + attacker_war_score >= 90 + AND = { + attacker_war_score >= 80 + root = { + has_perk = peacemaker_perk + } + } + } + root = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + } + primary_defender = { + is_ai = yes + } + } + AND = { + defender_war_score >= 70 primary_attacker = { is_ai = yes + save_temporary_scope_as = attacker + } + root = { + has_variable = peace_acceptance_head_scare + var:peace_acceptance_head_scare = { + this = scope:attacker + } } } } @@ -1848,6 +2090,28 @@ end_war_attacker_defeat_interaction = { is_ai = yes } } + AND = { + defender_war_score >= 90 + scope:actor = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + } + primary_attacker = { + is_ai = yes + } + } + AND = { + defender_war_score >= 70 + primary_attacker = { + is_ai = yes + save_temporary_scope_as = attacker + } + root = { + has_variable = peace_acceptance_head_scare + var:peace_acceptance_head_scare = { + this = scope:attacker + } + } + } } } add = 100 @@ -1889,6 +2153,35 @@ end_war_attacker_defeat_interaction = { desc = "PEACEMAKER_PERK_MODIFIER" } + modifier = { + scope:war.casus_belli = { + primary_defender = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + NOT = { this = scope:recipient } + } + } + + add = 10 + + desc = "NOMAD_LEGACY_PERK_MODIFIER" + } + + modifier = { + scope:war.casus_belli = { + primary_attacker = { + is_ai = yes + save_temporary_scope_as = attacker + } + primary_defender = { + has_variable = peace_acceptance_head_scare + var:peace_acceptance_head_scare = { + this = scope:attacker + } + } + } + add = 30 + desc = "COWED_BY_SEVERED_HEAD_MODIFIER" + } modifier = { scope:war.casus_belli = { primary_defender = { diff --git a/common/character_interactions/01_fp1_interactions.txt b/common/character_interactions/01_fp1_interactions.txt index 5e9d1647..4ee25e68 100644 --- a/common/character_interactions/01_fp1_interactions.txt +++ b/common/character_interactions/01_fp1_interactions.txt @@ -246,7 +246,10 @@ challenge_to_trial_by_combat_interaction = { 50 = { show_chance = no desc = fp1_tbc_winner_recipient - fp1_tbc_actor_defeated_effect = { TBC_LOSER = scope:actor } + fp1_tbc_actor_defeated_effect = { + TBC_LOSER = scope:actor + TBC_VICTOR = scope:recipient + } } } } @@ -267,7 +270,10 @@ challenge_to_trial_by_combat_interaction = { 50 = { show_chance = no desc = fp1_tbc_winner_recipient - fp1_tbc_actor_defeated_effect = { TBC_LOSER = scope:actor } + fp1_tbc_actor_defeated_effect = { + TBC_LOSER = scope:actor + TBC_VICTOR = scope:recipient + } } } } @@ -280,12 +286,18 @@ challenge_to_trial_by_combat_interaction = { 50 = { show_chance = no desc = fp1_tbc_winner_actor - fp1_tbc_humiliation_effect = { TBC_LOSER = scope:recipient } + fp1_tbc_humiliation_effect = { + TBC_LOSER = scope:recipient + TBC_VICTOR = scope:actor + } } 50 = { show_chance = no desc = fp1_tbc_winner_recipient - fp1_tbc_actor_defeated_effect = { TBC_LOSER = scope:actor } + fp1_tbc_actor_defeated_effect = { + TBC_LOSER = scope:actor + TBC_VICTOR = scope:recipient + } } } } diff --git a/common/character_interactions/03_fp2_interactions.txt b/common/character_interactions/03_fp2_interactions.txt index f67c8b88..0a174520 100644 --- a/common/character_interactions/03_fp2_interactions.txt +++ b/common/character_interactions/03_fp2_interactions.txt @@ -1997,16 +1997,17 @@ purchase_truce_interaction = { is_shown = { NOT = { scope:actor = scope:recipient } - # Scope:actor needs to either be involved in certain struggle types or else have a specific perk. scope:actor = { is_landless_adventurer = no - OR = { - any_character_struggle = { - involvement = involved - has_struggle_phase_parameter = unlocks_truce_purchasing_interaction + + # If scope:recipient is a nomad and the actor is not, this is always available; otherwise, + # scope:actor needs to either be involved in certain struggle types or else have a specific perk. + OR = { + AND = { + scope:recipient = { government_has_flag = government_is_nomadic } + NOT = { government_has_flag = government_is_nomadic } } - has_perk = defensive_measures_perk - culture = { has_cultural_parameter = unlocks_purchase_truce } + fp2_purchase_truce_interaction_soft_requirements_trigger = yes } # if you are not independent you should not be able to purchase truce with other fellow vassals only @@ -3139,6 +3140,7 @@ contract_assistance_interaction = { is_shown = { # Actor is Involved in Struggle scope:actor = { + NOT = { government_has_flag = government_is_herder } OR = { any_character_struggle = { involvement = involved @@ -3620,6 +3622,7 @@ contract_assistance_interaction = { is_imprisoned = no is_at_war = no ai_boldness >= -25 + current_military_strength >= 500 } ai_target_quick_trigger = { adult = yes } ai_targets = { diff --git a/common/character_interactions/05_bp2_interactions.txt b/common/character_interactions/05_bp2_interactions.txt index 8bfd457d..925392bb 100644 --- a/common/character_interactions/05_bp2_interactions.txt +++ b/common/character_interactions/05_bp2_interactions.txt @@ -37,6 +37,8 @@ offer_hostage_interaction = { is_shown = { # Cannot exchange hostages with self NOT = { scope:recipient = scope:actor } + # Cannot exchange hostages with a herder + NOT = { scope:recipient = { government_has_flag = government_is_herder } } # Only significant rulers use hostages scope:actor.highest_held_title_tier > tier_barony scope:recipient.highest_held_title_tier > tier_barony @@ -598,6 +600,8 @@ demand_hostage_interaction = { is_shown = { # Cannot exchange hostages with self NOT = { scope:recipient = scope:actor } + # Cannot exchange hostages with a herder + NOT = { scope:recipient = { government_has_flag = government_is_herder } } # Only significant rulers use hostages scope:actor.highest_held_title_tier > tier_barony OR = { @@ -1279,6 +1283,8 @@ exchange_hostage_interaction = { is_shown = { # Cannot exchange hostages with self NOT = { scope:recipient = scope:actor } + # Cannot exchange hostages with a herder + NOT = { scope:recipient = { government_has_flag = government_is_herder } } # Only significant rulers use hostages scope:actor.highest_held_title_tier > tier_barony OR = { @@ -2189,6 +2195,14 @@ return_hostage_interaction = { add = 25 desc = HOSTAGE_CULTURAL_TRADITION_REASON } + #DO NOT SEND BACK FRANKOKRATIA CLAIMANT + modifier = { + scope:hostage = { + has_character_flag = byz_claimant_flag + } + exists = global_var:byz_claimant_champion + factor = 0 + } } send_options_exclusive = no @@ -2592,6 +2606,15 @@ recall_hostage_interaction = { } desc = HOSTAGE_HAS_MINE_REASON } + #DO NOT SEND BACK FRANKOKRATIA CLAIMANT + modifier = { + desc = crusading_claim_cb_reason + scope:hostage = { + has_character_flag = byz_claimant_flag + } + exists = global_var:byz_claimant_champion + add = -5000 + } } auto_accept = { diff --git a/common/character_interactions/06_ep3_interactions.txt b/common/character_interactions/06_ep3_interactions.txt index a10af32b..32741de4 100644 --- a/common/character_interactions/06_ep3_interactions.txt +++ b/common/character_interactions/06_ep3_interactions.txt @@ -17,7 +17,7 @@ influence_candidacy_interaction = { every_house_member = { limit = { is_independent_ruler = no - government_allows = administrative + government_has_flag = government_is_administrative top_liege = scope:actor.top_liege any_valid_title_to_grant_trigger = { CANDIDATE = this @@ -32,7 +32,7 @@ influence_candidacy_interaction = { every_courtier_or_guest = { limit = { is_independent_ruler = no - government_allows = administrative + government_has_flag = government_is_administrative top_liege = scope:actor.top_liege any_valid_title_to_grant_trigger = { CANDIDATE = this @@ -74,13 +74,13 @@ influence_candidacy_interaction = { is_shown = { scope:actor = { is_ai = no - government_allows = administrative + government_has_flag = government_is_administrative } trigger_if = { limit = { exists = scope:secondary_recipient } scope:secondary_recipient = { is_independent_ruler = no - government_allows = administrative + government_has_flag = government_is_administrative top_liege = scope:actor.top_liege } } @@ -613,19 +613,107 @@ support_candidacy_interaction = { is_shown = { scope:actor = { is_ai = yes - government_allows = administrative + government_has_flag = government_is_administrative } scope:secondary_recipient = { is_independent_ruler = no - government_allows = administrative + government_has_flag = government_is_administrative top_liege = scope:actor.top_liege } } is_valid_showing_failures_only = { - any_valid_title_to_grant_trigger = { - CANDIDATE = scope:secondary_recipient - TOP_LIEGE = scope:recipient + scope:secondary_recipient ?= { + # This is broken out from any_valid_title_to_grant_trigger because of performance reasons + # When realms get really large, the AI needs a fixed pool of characters to promote + # Otherwise performance tanks significantly in the form of 'stutters'or smaller freezes + trigger_if = { # First, if the realm is enormous, restrict the candidate pool to the most immediate of family members + limit = { + scope:actor.top_liege.realm_size >= 250 + NOR = { + this = scope:actor + scope:actor.primary_heir ?= this + scope:actor.house.house_head ?= this + is_close_family_of = scope:actor + } + } + static_group_filter = { + group = ai_filter + match = { + value = 1 + subtract = { + add = scope:actor.top_liege.realm_size + multiply = 0.001 + multiply = 3 + min = 0.1 + max = 0.9 + } + } + } + } + trigger_else_if = { # Otherwise, go for close + extended family + limit = { + scope:actor.top_liege.realm_size >= 150 + NOR = { + this = scope:actor + scope:actor.primary_heir ?= this + scope:actor.house.house_head ?= this + is_close_or_extended_family_of = scope:actor + } + } + static_group_filter = { + group = ai_filter + match = { + value = 1 + subtract = { + add = scope:actor.top_liege.realm_size + multiply = 0.001 + multiply = 3 + min = 0.1 + max = 0.9 + } + } + } + } + trigger_else = { + always = yes + } + trigger_if = { # If the realm is large enough, the AI starts ignoring counties in their support + limit = { + scope:actor.top_liege.realm_size >= 150 + } + save_temporary_scope_as = candidate_temp + custom_tooltip = { + text = support_candidacy_can_appoint_for_title_tt + scope:recipient.primary_title = { + any_in_de_jure_hierarchy = { + continue = { + tier > tier_duchy + tier <= tier_county + } + + save_temporary_scope_as = title_temp + scope:candidate_temp = { can_appoint_for_title = scope:title_temp } + } + } + } + } + trigger_else = { + save_temporary_scope_as = candidate_temp + custom_tooltip = { + text = support_candidacy_can_appoint_for_title_tt + scope:recipient.primary_title = { + any_in_de_jure_hierarchy = { + continue = { + tier > tier_duchy + } + + save_temporary_scope_as = title_temp + scope:candidate_temp = { can_appoint_for_title = scope:title_temp } + } + } + } + } } scope:actor = { NOT = { is_at_war_with = scope:recipient } @@ -992,7 +1080,7 @@ support_candidacy_interaction = { any_heir_title = { is_noble_family_title = no holder = { - government_allows = administrative + government_has_flag = government_is_administrative } } } @@ -1147,11 +1235,11 @@ harm_candidacy_interaction = { is_shown = { scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative } scope:secondary_recipient = { is_independent_ruler = no - government_allows = administrative + government_has_flag = government_is_administrative top_liege = scope:actor.top_liege } } @@ -1400,7 +1488,7 @@ harm_candidacy_interaction = { ai_potential = { influence > major_influence_value - government_allows = administrative + government_has_flag = government_is_administrative ai_honor <= 25 } @@ -1487,7 +1575,7 @@ request_appointment_support = { limit = { this != scope:recipient is_alive = yes - government_allows = administrative + government_has_flag = government_is_administrative # Check that they are still valid to be appointed any_valid_title_to_grant_trigger = { CANDIDATE = this @@ -1505,7 +1593,7 @@ request_appointment_support = { every_house_member = { limit = { this != scope:recipient - government_allows = administrative + government_has_flag = government_is_administrative any_valid_title_to_grant_trigger = { CANDIDATE = this TOP_LIEGE = scope:actor.top_liege @@ -1561,10 +1649,10 @@ request_appointment_support = { } is_shown = { - scope:actor = { government_allows = administrative } + scope:actor = { government_has_flag = government_is_administrative } scope:recipient = { this != scope:actor - government_allows = administrative + government_has_flag = government_is_administrative top_liege = scope:actor.top_liege } } @@ -1573,7 +1661,7 @@ request_appointment_support = { scope:actor = { house = { any_house_member = { - government_allows = administrative + government_has_flag = government_is_administrative any_valid_title_to_grant_trigger = { CANDIDATE = this TOP_LIEGE = scope:actor.top_liege @@ -2166,7 +2254,7 @@ request_appointment_support = { } ai_potential = { - government_allows = administrative + government_has_flag = government_is_administrative house ?= { OR = { is_powerful_family = yes @@ -2216,12 +2304,12 @@ demand_admin_interaction = { desc = demand_admin_interaction_desc is_shown = { - scope:actor = { government_allows = administrative } + scope:actor = { government_has_flag = government_is_administrative } scope:recipient = { target_is_liege_or_above = scope:actor is_ai = yes is_ruler = yes - NOT = { government_allows = administrative } + NOT = { government_has_flag = government_is_administrative } } trigger_if = { limit = { @@ -2330,7 +2418,7 @@ demand_admin_interaction = { } ai_potential = { - government_allows = administrative + government_has_flag = government_is_administrative is_adult = yes } @@ -2407,8 +2495,8 @@ contest_appointment_interaction = { # Admin Govt #You don't have another appointment scope:actor = { is_landless_administrative = yes } - scope:recipient = { government_allows = administrative } - scope:intermediary ?= { government_allows = administrative } + scope:recipient = { government_has_flag = government_is_administrative } + scope:intermediary ?= { government_has_flag = government_is_administrative } # Make sure scope:recipient is suitable. scope:recipient = { # We only target vassals of the liege @@ -3096,8 +3184,8 @@ request_council_interaction = { liege ?= scope:recipient } #Admin only - scope:actor = { government_allows = administrative } - scope:recipient = { government_allows = administrative } + scope:actor = { government_has_flag = government_is_administrative } + scope:recipient = { government_has_flag = government_is_administrative } trigger_if = { limit = { exists = scope:target.councillor @@ -3531,10 +3619,10 @@ transfer_county_interaction = { scope:recipient = { target_is_liege_or_above = scope:actor highest_held_title_tier >= tier_duchy - government_allows = administrative + government_has_flag = government_is_administrative } scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative is_independent_ruler = yes highest_held_title_tier >= tier_empire } @@ -4456,8 +4544,8 @@ offer_eunuch_interaction = { is_shown = { # Only admin gov care about this - scope:actor = { government_allows = administrative } - scope:recipient = { government_allows = administrative } + scope:actor = { government_has_flag = government_is_administrative } + scope:recipient = { government_has_flag = government_is_administrative } # Only if you actually have any eunuchs in your court scope:actor = { any_courtier = { @@ -4948,10 +5036,10 @@ acknowledge_governor_interaction = { scope:recipient = { target_is_liege_or_above = scope:actor highest_held_title_tier >= tier_duchy - government_allows = administrative + government_has_flag = government_is_administrative } scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative is_independent_ruler = yes highest_held_title_tier >= tier_empire } @@ -5014,7 +5102,7 @@ acknowledge_governor_interaction = { } ai_potential = { - government_allows = administrative + government_has_flag = government_is_administrative highest_held_title_tier >= tier_empire } @@ -5107,9 +5195,9 @@ boost_efficiency_interaction = { desc = boost_efficiency_interaction_desc is_shown = { - scope:actor = { government_allows = administrative } + scope:actor = { government_has_flag = government_is_administrative } scope:recipient = { - government_allows = administrative + government_has_flag = government_is_administrative NOT = { this = scope:actor } is_governor = yes top_liege = scope:actor.top_liege @@ -5234,7 +5322,7 @@ boost_efficiency_interaction = { } ai_potential = { - government_allows = administrative + government_has_flag = government_is_administrative top_liege = { any_vassal = { is_governor = yes @@ -5319,7 +5407,7 @@ damage_efficiency_interaction = { desc = damage_efficiency_interaction_desc is_shown = { - scope:actor = { government_allows = administrative } + scope:actor = { government_has_flag = government_is_administrative } scope:recipient = { is_governor = yes NOT = { this = scope:actor } @@ -5445,7 +5533,7 @@ damage_efficiency_interaction = { } ai_potential = { - government_allows = administrative + government_has_flag = government_is_administrative top_liege = { any_vassal = { is_governor = yes @@ -5526,7 +5614,7 @@ governor_removal_interaction = { is_shown = { scope:actor = { is_independent_ruler = yes - government_allows = administrative + government_has_flag = government_is_administrative } scope:recipient = { NOT = { this = scope:actor } @@ -5973,7 +6061,7 @@ force_governor_removal_interaction = { scope:actor = { is_independent_ruler = no exists = top_liege - top_liege = { government_allows = administrative } + top_liege = { government_has_flag = government_is_administrative } } scope:secondary_recipient ?= { is_governor = yes } OR = { @@ -6429,7 +6517,7 @@ force_governor_removal_interaction = { ai_potential = { influence > massive_influence_value is_independent_ruler = no - government_allows = administrative + government_has_flag = government_is_administrative } ai_accept = { base = -50 @@ -6672,12 +6760,12 @@ force_step_down_interaction = { is_shown = { scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative is_independent_ruler = no this != scope:recipient } scope:recipient = { - government_allows = administrative + government_has_flag = government_is_administrative is_governor = yes } } @@ -7009,7 +7097,7 @@ force_step_down_interaction = { is_scheme_category = political } } - government_allows = administrative + government_has_flag = government_is_administrative is_independent_ruler = no highest_held_title_tier >= tier_duchy } @@ -7197,7 +7285,7 @@ request_governorship_interaction = { scope:recipient != scope:actor scope:recipient = scope:actor.top_liege scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative is_governor = no } } @@ -7255,7 +7343,7 @@ request_governorship_interaction = { scope:target.tier = tier_duchy trigger_if = { limit = { exists = scope:target.holder } - scope:target.holder ?= { government_allows = administrative } + scope:target.holder ?= { government_has_flag = government_is_administrative } } } @@ -8230,12 +8318,12 @@ request_ally_title_troops_interaction = { is_shown = { scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative is_independent_ruler = no is_governor = yes } scope:recipient = { - government_allows = administrative + government_has_flag = government_is_administrative NOT = { this = scope:actor this = scope:actor.top_liege @@ -8448,12 +8536,12 @@ request_emperor_title_troops_interaction = { is_shown = { scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative is_independent_ruler = no is_governor = yes } scope:recipient = { - government_allows = administrative + government_has_flag = government_is_administrative this = scope:actor.liege } } @@ -8936,12 +9024,12 @@ request_title_troops_back_interaction = { is_shown = { scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative is_independent_ruler = no is_ai = no # The AI should not request their troops back ahead of time } scope:recipient = { - government_allows = administrative + government_has_flag = government_is_administrative this = scope:actor } } @@ -9047,13 +9135,13 @@ request_raid_remit_interaction = { is_shown = { scope:actor = { is_independent_ruler = no - government_allows = administrative + government_has_flag = government_is_administrative } scope:secondary_recipient ?= { NOT = { house = scope:recipient.house } top_liege = scope:actor.top_liege NOT = { house = scope:actor.house } - government_allows = administrative + government_has_flag = government_is_administrative any_held_title = { is_noble_family_title = yes } } } @@ -9403,7 +9491,7 @@ request_co_emperor_interaction = { is_shown = { scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative is_independent_ruler = no } scope:recipient = { @@ -9462,7 +9550,7 @@ request_co_emperor_interaction = { scope:recipient = { custom_tooltip = { text = declare_me_co_emperor_interaction.tt.effect - start_diarchy = co_emperorship + try_start_diarchy = co_emperorship set_diarch = scope:actor } if = { @@ -9941,11 +10029,11 @@ frontier_influence_war_interaction = { is_shown = { scope:actor = { is_independent_ruler = yes - government_allows = administrative + government_has_flag = government_is_administrative NOT = { government_has_flag = government_is_landless_adventurer } } scope:recipient = { - government_allows = administrative + government_has_flag = government_is_administrative NOT = { government_has_flag = government_is_landless_adventurer } custom_tooltip = { text = admin_theme_type_trigger @@ -10082,7 +10170,7 @@ frontier_influence_war_interaction = { } ai_potential = { - government_allows = administrative + government_has_flag = government_is_administrative is_independent_ruler = yes } @@ -10339,11 +10427,11 @@ house_head_request_interaction = { is_shown = { NOT = { scope:recipient = scope:actor } scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative this = house.house_head } scope:recipient = { - government_allows = administrative + government_has_flag = government_is_administrative house = scope:actor.house } } @@ -10892,7 +10980,7 @@ ep3_hof_ask_for_influence_interaction = { } scope:actor = { is_playable_character = yes - government_allows = administrative + government_has_flag = government_is_administrative is_lowborn = no } } @@ -11463,10 +11551,10 @@ ep3_join_faction_war_interaction = { this = scope:recipient is_at_war_with = scope:recipient } - government_allows = administrative + government_has_flag = government_is_administrative } scope:recipient = { - government_allows = administrative + government_has_flag = government_is_administrative scope:actor.liege ?= liege } scope:actor.joined_faction ?= { @@ -11717,11 +11805,11 @@ ep3_switch_faction_war_sides_interaction = { scope:actor = { has_ep3_dlc_trigger = yes is_at_war_with = scope:recipient - government_allows = administrative + government_has_flag = government_is_administrative NOT = { this = scope:recipient } } scope:recipient = { - government_allows = administrative + government_has_flag = government_is_administrative OR = { is_vassal_of = scope:actor scope:actor.liege ?= liege @@ -12086,7 +12174,7 @@ ep3_governor_request_war_permission_interaction = { is_shown = { scope:actor = { - government_allows = administrative + government_has_flag = government_is_administrative liege = scope:recipient OR = { vassal_contract_has_flag = admin_theme_frontier @@ -12094,7 +12182,7 @@ ep3_governor_request_war_permission_interaction = { } } scope:recipient = { - government_allows = administrative + government_has_flag = government_is_administrative is_independent_ruler = yes has_realm_law_flag = admin_vassal_wars_permission_only } @@ -12283,7 +12371,7 @@ ep3_governor_request_war_permission_interaction = { } ai_potential = { - government_allows = administrative + government_has_flag = government_is_administrative is_adult = yes liege = { is_at_war = no } # Don't ask if your liege is at war } @@ -12349,7 +12437,7 @@ ep3_mass_arrests_interaction = { has_ep3_dlc_trigger = yes scope:actor = { is_independent_ruler = yes - government_allows = administrative + government_has_flag = government_is_administrative dynasty ?= { has_dynasty_perk = ep3_administrative_legacy_5 } } scope:recipient = { @@ -12421,7 +12509,7 @@ ep3_mass_arrests_interaction = { } ai_potential = { - government_allows = administrative + government_has_flag = government_is_administrative is_adult = yes } diff --git a/common/character_interactions/06_ep3_laamp_interactions.txt b/common/character_interactions/06_ep3_laamp_interactions.txt index 42fa0210..3ad10270 100644 --- a/common/character_interactions/06_ep3_laamp_interactions.txt +++ b/common/character_interactions/06_ep3_laamp_interactions.txt @@ -62,7 +62,10 @@ purchase_land_interaction = { scope:recipient = { is_landed = yes # Need to own the land/cannot directly buy a governorship (procure estate first) - NOT = { government_has_flag = government_is_administrative } + NOR = { + government_has_flag = government_is_administrative + government_has_flag = government_is_nomadic + } } NOT = { scope:recipient = scope:actor } } @@ -1538,6 +1541,9 @@ negotiate_settlement_interaction = { has_trait = craven has_trait = generous } + NOT = { + government_has_flag = government_is_nomadic + } } ai_accept = { @@ -4491,6 +4497,7 @@ reinforce_soldiers_interaction = { has_ep3_dlc_trigger = yes scope:actor = { government_allows = conditional_maa_refill + NOT = { government_has_flag = government_is_nomadic } } scope:recipient = scope:actor } @@ -5430,6 +5437,7 @@ refill_maa_interaction = { has_ep3_dlc_trigger = yes scope:actor = { government_allows = conditional_maa_refill + NOT = { government_has_flag = government_is_nomadic } } scope:recipient = scope:actor } @@ -5950,7 +5958,7 @@ procure_estate_interaction = { scope:actor = { government_has_flag = government_is_landless_adventurer } scope:recipient = { is_landed = yes - has_government = administrative_government + government_has_flag = government_is_administrative } NOT = { scope:recipient = scope:actor } } diff --git a/common/character_interactions/06_ep3_scheme_interactions.txt b/common/character_interactions/06_ep3_scheme_interactions.txt index 22360f68..93eee26e 100644 --- a/common/character_interactions/06_ep3_scheme_interactions.txt +++ b/common/character_interactions/06_ep3_scheme_interactions.txt @@ -23,11 +23,11 @@ start_slander_interaction = { scope:actor = { is_adult = yes is_imprisoned = no - has_government = administrative_government + government_has_flag = government_is_administrative } scope:recipient = { NOT = { this = scope:actor } - has_government = administrative_government + government_has_flag = government_is_administrative top_liege = scope:actor.top_liege } } @@ -325,10 +325,10 @@ start_promote_interaction = { scope:actor = { is_adult = yes is_imprisoned = no - has_government = administrative_government + government_has_flag = government_is_administrative } scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative top_liege = scope:actor.top_liege } } @@ -919,11 +919,11 @@ start_challenge_status_interaction = { is_shown = { scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative } scope:recipient != scope:actor scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative top_liege = scope:actor.top_liege } } @@ -1046,7 +1046,7 @@ start_challenge_status_interaction = { is_scheme_category = political } } - has_government = administrative_government + government_has_flag = government_is_administrative } auto_accept = yes @@ -1148,7 +1148,7 @@ start_expand_power_base_interaction = { scope:actor = { is_adult = yes is_imprisoned = no - has_government = administrative_government + government_has_flag = government_is_administrative this = scope:recipient exists = house.house_head house.house_head = { @@ -1303,9 +1303,9 @@ start_depose_interaction = { is_shown = { has_ep3_dlc_trigger = yes - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative primary_title.tier >= tier_empire # Target has to be the emperor this != scope:actor top_liege.primary_title = scope:actor.top_liege.primary_title # This hides the tooltip @@ -1601,7 +1601,7 @@ start_foster_legitimacy_interaction = { scope:actor = { is_adult = yes is_imprisoned = no - has_government = administrative_government + government_has_flag = government_is_administrative } NOT = { @@ -1611,7 +1611,7 @@ start_foster_legitimacy_interaction = { scope:recipient = { this = scope:actor.liege is_adult = yes - has_government = administrative_government + government_has_flag = government_is_administrative } } @@ -1768,7 +1768,7 @@ start_damage_legitimacy_interaction = { scope:actor = { is_adult = yes is_imprisoned = no - has_government = administrative_government + government_has_flag = government_is_administrative } NOT = { @@ -1778,7 +1778,7 @@ start_damage_legitimacy_interaction = { scope:recipient = { this = scope:actor.liege is_adult = yes - has_government = administrative_government + government_has_flag = government_is_administrative } } @@ -2776,13 +2776,13 @@ start_raid_estate_interaction = { is_highlighted = { scope:actor.var:raid_estate_permission ?= scope:recipient.house } is_shown = { - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } scope:recipient.house.house_head ?= { this = scope:recipient exists = house NOT = { house = scope:actor.house } top_liege = scope:actor.top_liege - has_government = administrative_government + government_has_flag = government_is_administrative any_held_title = { is_noble_family_title = yes } } } @@ -3039,7 +3039,7 @@ start_teach_governor_interaction = { cooldown_against_recipient = { years = 15 } is_shown = { - scope:actor = { has_government = administrative_government } + scope:actor = { government_has_flag = government_is_administrative } scope:recipient != scope:actor scope:recipient = { is_alive = yes diff --git a/common/character_interactions/06_ep3_test_interactions_.txt b/common/character_interactions/06_ep3_test_interactions_.txt index 26719761..25c2c053 100644 --- a/common/character_interactions/06_ep3_test_interactions_.txt +++ b/common/character_interactions/06_ep3_test_interactions_.txt @@ -64,7 +64,7 @@ invest_appointment_interaction = { is_shown = { debug_only = yes scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative liege = scope:actor } } @@ -93,10 +93,10 @@ transfer_title_army_maa_interaction = { is_shown = { debug_only = yes scope:recipient = { - has_government = administrative_government + government_has_flag = government_is_administrative } scope:actor = { - has_government = administrative_government + government_has_flag = government_is_administrative } scope:actor != scope:recipient } diff --git a/common/character_interactions/09_mpo_interactions.txt b/common/character_interactions/09_mpo_interactions.txt new file mode 100644 index 00000000..764995ed --- /dev/null +++ b/common/character_interactions/09_mpo_interactions.txt @@ -0,0 +1,10439 @@ +offer_confederation_interaction = { + category = interaction_category_diplomacy + icon = offer_confederation_interaction + + desc = offer_confederation_interaction_desc + + ai_targets = { + ai_recipients = neighboring_rulers_including_tributary_borders + } + ai_frequency = 8 + popup_on_receive = yes + pause_on_receive = yes + + common_interaction = yes + + cooldown_against_recipient = { years = 3 } + + is_shown = { + scope:actor = { + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + is_playable_character = yes + OR = { + is_independent_ruler = yes + is_confederation_member = yes + } + } + scope:recipient = { + is_playable_character = yes + is_independent_ruler = yes + NOR = { + government_has_flag = government_is_herder + this = scope:actor + } + } + } + + is_valid_showing_failures_only = { + trigger_if = { + limit = { + scope:actor = { is_confederation_member = no } + } + custom_tooltip = { + text = forming_confederation_tt + scope:actor = { + has_character_flag = forming_confederation + } + } + } + scope:actor = { + is_imprisoned = no + } + scope:recipient = { + valid_confederation_member_trigger = { CHARACTER = scope:actor } + is_imprisoned = no + is_at_war = no + } + } + + cost = { + prestige = { + value = 0 + if = { + limit = { scope:prestige_send_option = yes } + add = scope:actor.minor_prestige_value + desc = PRESTIGE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + greeting = positive + notification_text = OFFER_CONFEDERATION_INTERACTION_NOTIFICATION + + ai_accept = { + base = -50 + # MAIN + # Heretic/Infidel modifier. + # Tier difference modifier. + # Dejure modifier. + # Distant/Remote Realm modifier. + # Military power difference modifier. + + # MINOR + # Rivalry modifier. + # Same Dynasty modifier. + # Cultural/Cultural Group modifiers. + # Ageism modifier vs kids. + # Ruler Legitimacy modifier. + # Claimant modifier. + # FP3 Piety Level modifier. + + # OPINION SCALES + # Dread + # Compare Opinion modifier. + + #WHEN UPDATING ANYTHING HERE, PLEASE DO THE SAME (BUT INVERTED) IN LEAVE CONFEDERATION DECISION + + # PERKS + modifier = { # Perk boost + desc = offer_vassalization_true_ruler_perk_tt + trigger = { + scope:actor = { has_perk = true_ruler_perk } + } + add = true_ruler_value + } + modifier = { # Education 5 boost + desc = offer_vassalization_education_diplomacy_5_tt + trigger = { + scope:actor = { has_trait_with_flag = offer_vassalisation_25 } + } + add = 25 + } + + # EVENTS - temporary bonuses gained by events + modifier = { + desc = event_bonus_to_vassal_accept_tt + trigger = { + scope:actor = { has_character_modifier = event_bonus_to_vassal_accept } + } + add = 20 + } + + + # STRUGGLES - bonus gained by successful Sway scheme during the Persian Struggle + modifier = { + desc = fp3_persian_struggle_previously_swayed_tt + trigger = { + scope:recipient = { + has_opinion_modifier = { + modifier = scheme_sway_and_compelled_to_submit_opinion + target = scope:actor + } + } + } + add = 20 + } + + modifier = { + desc = fp3_rekindler_of_iran_modifier_reason + trigger = { + AND = { + scope:actor = { dynasty ?={ has_dynasty_modifier = fp3_rekindler_of_iran_modifier } } + scope:recipient = { culture = { has_cultural_pillar = heritage_iranian } } + } + } + add = 20 + } + + + modifier = { # Cultural Acceptance + add = offer_vassalage_acceptance_value + desc = cultural_acceptance_interaction_reason + trigger = { + scope:actor = { + NOT = { has_same_culture_as = scope:recipient } + culture = { + cultural_acceptance = { target = scope:recipient.culture value <= 90 } + } + } + } + } + + # MAIN + modifier = { #Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { #Of two different faiths AND the potential vassal's faith is not pluralistic. + faith = scope:actor.faith + faith = { has_doctrine = doctrine_pluralism_pluralistic } + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + add = { + value = -30 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -30 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -30 + } + } + } + + modifier = { #Different faith, pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { + faith = scope:actor.faith + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -15 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -15 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -15 + } + } + } + + modifier = { #Different faith, both have pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { + faith = scope:actor.faith + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -10 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -10 + } + } + } + modifier = { #We just fought against each other. + desc = offer_vassalization_interaction_aibehavior_recent_war_tt + trigger = { + scope:recipient = { + any_truce_holder = { + this = scope:actor + } + } + # Ensure the truce wasn't purchased and is indeed from a war + scope:actor = { + NOT = { + has_purchased_truce_with_char = { TARGET = scope:recipient } + } + } + } + add = -40 + } + modifier = { #I fought an independence war against you. + desc = offer_confederation_independence_war_tt + trigger = { + scope:recipient = { + exists = var:independence_war_former_liege + var:independence_war_former_liege = scope:actor.top_liege + } + } + add = -100 + } + modifier = { # Isolationist tradition + desc = isolationist_reason + trigger = { + NOT = { + scope:actor.culture = scope:recipient.culture + } + scope:recipient.culture = { + has_cultural_tradition = tradition_isolationist + } + } + add = -50 + } + modifier = { #Bankrupt + desc = bankrupt_reason + trigger = { + scope:actor.gold <= -1 + } + add = -30 + } + modifier = { #Wide difference in rank + desc = offer_vassalization_interaction_aibehavior_widetitletier_tt + trigger = { + scope:actor = { + tier_difference = { + target = scope:recipient + value > 1 + } + } + } + add = 10 + } + modifier = { # Allied + desc = offer_vassalization_interaction_aibehavior_allied_tt + trigger = { + scope:recipient = { + is_allied_to = scope:actor + } + } + add = 50 + } + modifier = { # Is the Rightful Liege of recipient + desc = offer_vassalization_interaction_aibehavior_rightfulliegetitleholder_tt + trigger = { + scope:actor = { is_rightful_liege_of = scope:recipient } + } + add = 20 + } + modifier = { # Encircled + desc = offer_vassalization_interaction_aibehavior_encircled_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + NOT = { + this = scope:actor + } + } + } + NOT = { + any_realm_county = { + is_coastal_county = yes + } + } + } + } + add = 40 + } + modifier = { #No adjacency + desc = offer_vassalization_interaction_aibehavior_unconnectedrealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value < 100000 } } + } + add = -25 + } + modifier = { #Distant Realm + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 100000 } } + } + add = -100 + } + modifier = { #Remote Realm. + desc = offer_vassalization_interaction_aibehavior_remoterealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 200000 } } + } + add = -175 + } + #Relative power + modifier = { + desc = offer_vassalization_interaction_aibehavior_power_tt + add = { + value = 1 + subtract = { + value = scope:recipient.max_military_strength # Intended for recipient to use max, to avoid having vassalizations become too easy for weakened realms + divide = { value = scope:actor.top_liege.current_military_strength min = 1 } + } + multiply = 5 + ceiling = yes + min = -100 + } + } + #Powerful vassal opinion of you + modifier = { + desc = offer_confederation_offerer_vassal_opinion_tt + trigger = { + scope:actor.top_liege = { + number_of_powerful_vassals >= 1 + } + } + + add = { + value = 0 + scope:actor.top_liege = { + every_powerful_vassal = { + if = { + limit = { + save_temporary_opinion_value_as = { + name = vassal_opinion + target = scope:actor.top_liege + } + } + add = scope:vassal_opinion + } + } + + if = { + limit = { + number_of_powerful_vassals > 0 + } + divide = number_of_powerful_vassals + } + else = { + divide = 5 + } + } + divide = 10 + } + } + + # MINOR + modifier = { #Friend modifier. + desc = offer_vassalization_interaction_aibehavior_friend_tt + trigger = { + scope:recipient = { + has_relation_friend = scope:actor + NOT = { has_relation_best_friend = scope:actor } + } + } + add = 25 + } + modifier = { #Best Friend modifier. + desc = offer_vassalization_interaction_aibehavior_best_friend_tt + trigger = { + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + add = 50 + } + modifier = { #Lover modifier. + desc = interaction_lover + trigger = { + scope:recipient = { + has_relation_lover = scope:actor + NOT = { has_relation_soulmate = scope:actor } + } + } + add = 25 + } + modifier = { #Soulmate modifier. + desc = interaction_soulmate + trigger = { + scope:recipient = { + has_relation_soulmate = scope:actor + } + } + add = 50 + } + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -200 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -1000 + } + + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_confederation_tt + trigger = { + exists = scope:actor.confederation + scope:actor.confederation = { + any_confederation_member = { + NOT = { + this = scope:actor + } + has_relation_rival = scope:recipient + NOT = { has_relation_nemesis = scope:recipient } + } + } + } + add = -100 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_confederation_tt + trigger = { + exists = scope:actor.confederation + scope:actor.confederation = { + any_confederation_member = { + NOT = { + this = scope:actor + } + has_relation_nemesis = scope:recipient + } + } + } + add = -500 + } + modifier = { #Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + trigger = { + exists = scope:actor.dynasty + exists = scope:recipient.dynasty + scope:recipient = { + dynasty = scope:actor.dynasty + } + } + add = 25 + } + modifier = { #Same House modifier. + desc = offer_vassalization_interaction_aibehavior_house_tt + trigger = { + exists = scope:actor.house + exists = scope:recipient.house + scope:recipient = { + house = scope:actor.house + } + } + add = 50 + } + + modifier = { # Same language + add = 20 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + modifier = { # Iberian Struggle, less likely for outsiders to vassalize inside + add = -35 + desc = iberian_struggle_reason_reason + trigger = { + scope:actor = { + NOT = { + any_character_struggle = { is_struggle_type = iberian_struggle } + } + } + scope:recipient = { + any_character_struggle = { is_struggle_type = iberian_struggle } + } + } + } + + modifier = { #Ageism modifier vs kids. + desc = offer_vassalization_interaction_aibehavior_child_tt + trigger = { + scope:actor = { + age < 12 + } + scope:recipient = { + age > 16 + } + } + add = -5 + } + modifier = { #Illegitimacy modifier. + desc = confederation_offerer_illegitimate_tt + trigger = { + scope:actor.top_liege = { + OR = { + AND = { + has_trait = bastard + scope:recipient = { + faith = { NOT = { has_doctrine = doctrine_bastardry_none } } + } + } + has_trait = denounced + has_trait = disinherited + } + } + } + add = -20 + } + + modifier = { #Claimant modifier. + desc = confederation_interaction_aibehavior_claimant_tt + trigger = { + scope:actor.top_liege.primary_title = { + scope:recipient = { + has_claim_on = prev + } + } + } + add = -20 + } + + modifier = { # Ambitious + desc = TAKE_THE_VOWS_AMBITIOUS + trigger = { + scope:recipient = { + has_trait = ambitious + } + } + add = -25 + } + + modifier = { # Paranoid + desc = INTERACTION_PARANOID + trigger = { + scope:recipient = { + has_trait = paranoid + } + } + add = -25 + } + + modifier = { # Arrogant + desc = INTERACTION_ARROGANT + trigger = { + scope:recipient = { + has_trait = arrogant + } + } + add = -25 + } + + modifier = { # Fickle + desc = INTERACTION_FICKLE + trigger = { + scope:recipient = { + has_trait = fickle + } + } + add = -15 + } + + modifier = { # Stubborn + desc = INTERACTION_STUBBORN + trigger = { + scope:recipient = { + has_trait = stubborn + } + } + add = -15 + } + + modifier = { # Greedy + desc = INTERACTION_GREEDY + trigger = { + scope:recipient = { + has_trait = greedy + } + } + add = -15 + } + + modifier = { # Trusting + desc = TAKE_THE_VOWS_TRUSTING + trigger = { + scope:recipient = { + has_trait = trusting + } + } + add = 15 + } + + modifier = { # Content + desc = INTERACTION_CONTENT + trigger = { + scope:recipient = { + has_trait = content + } + } + add = 15 + } + + modifier = { # Craven + desc = INTERACTION_CRAVEN + trigger = { + scope:recipient = { + has_trait = craven + } + } + add = 25 + } + + modifier = { # FP3 modifier. + desc = GENERIC_YOUR_PIETY_LEVEL_MODIFIER + trigger = { scope:actor = { any_character_struggle = { has_struggle_phase_parameter = piety_level_affects_vassalage_acceptance } } } + add = { + value = { + value = scope:actor.piety_level + subtract = low_piety_level + } + multiply = 10 + } + } + + # OPINION INFLUENCE + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + opinion_modifier = { #Compare Opinion modifier. + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.35 + } + + # DIPLOMATIC COURT GRANDEUR BONUS + modifier = { + trigger = { + scope:actor.top_liege = { + has_royal_court = yes + has_dlc_feature = royal_court + has_court_type = court_diplomatic + court_grandeur_current_level >= 1 + } + } + add = { + value = scope:actor.top_liege.court_grandeur_current + if = { + limit = { # Reduce the bonus if you are below your expected level + scope:actor.top_liege = { + court_grandeur_current_level < court_grandeur_minimum_expected_level + } + } + multiply = 0.15 + } + else = { + multiply = 0.3 + } + } + desc = DIPLOMATIC_COURT_ACCEPTANCE_INCREASE_REASON + } + + # LOW LEGITIMACY + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -10 + scope:actor = { + has_legitimacy_flag = reduced_confederation_acceptance + } + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -25 + scope:actor = { + has_legitimacy_flag = very_reduced_confederation_acceptance + } + } + + # HIGH LEGITIMACY + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 15 + scope:actor = { + has_legitimacy_flag = increased_confederation_acceptance + } + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 40 + scope:actor = { + has_legitimacy_flag = very_increased_confederation_acceptance + } + } + + # HERD + modifier = { + add = 40 + scope:herd_send_option = yes + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + # PRESTIGE + modifier = { + add = 40 + scope:prestige_send_option = yes + desc = PRESTIGE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + #CULTURE + modifier = { + add = 50 + scope:actor = { + culture = scope:recipient.culture + } + desc = "SAME_CULTURE_REASON" + } + modifier = { + add = -20 + NOT = { + scope:actor = { + culture = scope:recipient.culture + } + } + scope:actor = { + NOR = { + culture = { + any_parent_culture_or_above = { + this = scope:recipient.culture + } + } + scope:recipient.culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:recipient.culture + } + } + } + desc = "DIFFERENT_CULTURE_REASON" + } + + #Conquerors have no interest in this + modifier = { + scope:recipient = { + has_trait = conqueror + } + add = -1000 + } + modifier = { + scope:recipient = { + has_trait = greatest_of_khans + } + add = -1000 + } + + # Are you using a hook? + modifier = { + trigger = { + scope:hook ?= yes + } + add = 100 + desc = LEGEND_HOOK_USED + } + + #No neighbor scaring them + modifier = { + add = -30 + desc = NO_FRIGHTENING_NEIGHBOR_REASON + NOT = { + scope:recipient = { + confederation_neighboring_foe_trigger = { CHARACTER = scope:recipient } + } + } + } + + #Neighbor is TERRIFYING them + modifier = { + add = 30 + desc = TERRIFYING_NEIGHBOR_REASON + scope:recipient = { + save_temporary_scope_as = confederate + any_land_neighboring_realm_with_tributaries_owner = { + top_suzerain ?= { + is_confederation_member = no + NOR = { + this = scope:actor + this = scope:actor.top_liege + } + confederation_worthy_foe_strength_ratio_value <= 0.25 + NOT = { is_allied_to = scope:recipient } + OR = { + highest_held_title_tier >= tier_kingdom + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_evil_level + } + } + has_trait = conqueror + has_trait = greatest_of_khans + any_owned_story = { + OR = { + story_type = story_greatest_of_khans + story_type = story_mongol_invasion + } + } + } + } + } + } + } + + #You have too many confederates + #For duchy + modifier = { + add = duchy_confederation_vassals_value + desc = TOO_MANY_CONFEDERATION_VASSALS_REASON + scope:actor = { + is_confederation_member = yes + } + scope:actor.confederation = { + any_confederation_member = { + count >= 6 + highest_held_title_tier >= tier_county + } + } + } + + #Another confederation of recipient's culture exists + modifier = { + add = -100 + desc = ANOTHER_CULTURE_CONFEDERATION_REASON + NOT = { + scope:actor.culture = { + this = scope:recipient.culture + } + } + any_in_global_list = { + variable = confederations + NOT = { + this = scope:actor.confederation + } + has_variable = confederation_culture + var:confederation_culture = scope:actor.culture + } + } + + #Forcing them to join war + modifier = { + add = -100 + desc = FORCED_TO_JOIN_WAR_REASON + scope:actor = { + is_at_war_as_defender = yes + any_character_war = { + primary_defender = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + } + } + is_defender = scope:actor + NOR = { + any_war_attacker = { + is_allied_to = scope:recipient + } + any_war_attacker = { + this = scope:recipient + } + any_war_defender = { + this = scope:recipient + } + any_war_attacker = { + scope:recipient = { + has_truce = prev + } + } + } + } + } + } + + #You will be taking over their war + modifier = { + add = 100 + desc = TAKING_OVER_DEFENSIVE_WAR_REASON + scope:recipient = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = scope:recipient + is_defender = scope:recipient + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_defender = { + this = scope:actor + } + } + defender_war_score < 80 + defender_war_score >= 0 + } + } + } + modifier = { + add = 200 + desc = TAKING_OVER_DEFENSIVE_WAR_REASON + scope:recipient = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = scope:recipient + is_defender = scope:recipient + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_defender = { + this = scope:actor + } + } + defender_war_score < 0 + } + } + } + + #Culture is into/not into confederation + modifier = { + add = 10 + desc = CONFEDERATION_ETHOS_REASON + scope:recipient.culture = { + OR = { + has_cultural_pillar = ethos_stoic + has_cultural_pillar = ethos_communal + } + } + } + modifier = { + add = 20 + desc = CONFEDERATION_ETHOS_REASON + scope:recipient.culture = { + OR = { + has_cultural_pillar = ethos_egalitarian + } + } + } + modifier = { + add = -10 + desc = CONFEDERATION_ETHOS_REASON + scope:recipient.culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_bureaucratic + } + } + } + + modifier = { # Herder + add = 50 + desc = CONFEDERATION_HERDER_REASON + trigger = { + scope:recipient = { + government_has_flag = government_is_herder + } + } + } + modifier = { + add = -20 + desc = NOMADIC_AUTHORITY_REASON + trigger = { + scope:recipient = { + has_realm_law = nomadic_authority_3 + } + } + } + modifier = { + add = -50 + desc = NOMADIC_AUTHORITY_REASON + trigger = { + scope:recipient = { + has_realm_law = nomadic_authority_4 + } + } + } + modifier = { + add = -100 + desc = NOMADIC_AUTHORITY_REASON + trigger = { + scope:recipient = { + has_realm_law = nomadic_authority_5 + } + } + } + modifier = { + add = -20 + desc = TRIBAL_AUTHORITY_REASON + trigger = { + scope:recipient = { + has_realm_law = tribal_authority_2 + } + } + } + modifier = { + add = -50 + desc = TRIBAL_AUTHORITY_REASON + trigger = { + scope:recipient = { + has_realm_law = tribal_authority_3 + } + } + } + modifier = { #left your confederation + add = -50 + desc = LEFT_YOUR_CONFEDERATION_REASON + exists = scope:actor.confederation + scope:recipient = { + has_variable = left_confederation + var:left_confederation ?= { + this = scope:actor.confederation + } + } + } + } + + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { # Herd + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:actor.domicile = { herd >= minor_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_CONFEDERATION + } + + send_option = { # Prestige + is_shown = { + always = yes + } + is_valid = { + scope:actor = { prestige >= minor_prestige_value } + } + flag = prestige_send_option + localization = TRADE_PRESTIGE_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = no + + on_accept = { + if = { + #checking that the delay hasn't made the character invalid + limit = { + scope:recipient = { + is_playable_character = yes + } + } + if = { + limit = { + scope:actor = { + has_character_flag = forming_confederation + } + } + scope:actor = { remove_character_flag = forming_confederation } + } + if = { + limit = { + scope:recipient = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = scope:recipient + is_defender = scope:recipient + } + } + } + scope:recipient = { + every_character_war = { + limit = { + is_war_leader = scope:recipient + is_defender = scope:recipient + } + add_to_list = recipient_wars + } + } + every_in_list = { + list = recipient_wars + save_scope_as = recipient_war + primary_attacker = { + save_scope_as = attacker + } + add_defender = scope:actor + hidden_effect = { + scope:actor.confederation ?= { + every_confederation_member = { + limit = { + NOR = { + is_attacker_in_war = scope:recipient_war + is_defender_in_war = scope:recipient_war + is_at_war_with = scope:recipient + is_allied_to = scope:attacker + is_imprisoned_by = scope:recipient + is_at_war_with = scope:recipient + } + } + scope:recipient_war = { + add_defender = prev + } + } + } + } + } + if = { + limit = { + scope:actor.confederation ?= { + any_confederation_member = { + NOR = { + is_attacker_in_war = scope:recipient_war + is_defender_in_war = scope:recipient_war + this = scope:actor + is_at_war_with = scope:recipient + is_allied_to = scope:attacker + is_imprisoned_by = scope:recipient + is_at_war_with = scope:recipient + } + } + } + } + scope:actor = { + custom_tooltip = confederates_joining_recipient_war_tt + } + } + } + scope:actor = { + save_scope_as = confederation_offerer + } + scope:recipient = { + save_scope_as = confederation_accepter + } + #Confederation doesn't exist yet + if = { + limit = { + scope:actor = { + is_confederation_member = no + } + } + scope:actor = { + custom_tooltip = create_confederation_tt + custom_tooltip = confederation_defensive_wars_tt + custom_tooltip = unlock_leave_confederation_interaction_tt + if = { + limit = { + government_has_flag = government_is_nomadic + } + add_character_modifier = { + modifier = mpo_confederation_member_modifier + years = 5 + } + capital_county ?= { + change_county_fertility = major_county_fertility_level_gain + } + } + } + scope:recipient = { + offer_confederation_accepter_effect = yes + } + } + #Confederation already exists + else = { + scope:actor.confederation = { + save_scope_as = confederation + } + show_as_tooltip = { + #If actor is top liege and offering vassaldom + scope:recipient = { + offer_confederation_accepter_effect = yes + } + } + } + if = { + limit = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + scope:recipient = { + add_character_modifier = { + modifier = mpo_confederation_member_modifier + years = 5 + } + capital_county ?= { + change_county_fertility = major_county_fertility_level_gain + } + } + } + if = { + limit = { + scope:recipient = { + is_ai = no + } + } + scope:recipient = { + custom_tooltip = confederation_raiding_attacking_tt + if = { + limit = { + government_has_flag = government_is_nomadic + } + custom_tooltip = confederation_restrictions_warning_tt + } + else = { + custom_tooltip = confederation_restrictions_tribe_warning_tt + } + } + } + scope:recipient = { + if = { + limit = { + government_has_flag = government_is_nomadic + } + custom_tooltip = confederation_migrating_leaving_warning_tt + } + } + scope:actor = { + #Event distributor event + trigger_event = mpo_interactions_events.0001 + } + if = { + limit = { + scope:actor = { + is_at_war_as_defender = yes + any_character_war = { + primary_defender = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + } + } + is_defender = scope:actor + NOR = { + any_war_attacker = { + is_allied_to = scope:recipient + } + any_war_attacker = { + this = scope:recipient + } + any_war_defender = { + this = scope:recipient + } + any_war_attacker = { + scope:recipient = { + has_truce = prev + } + } + } + } + } + } + scope:actor = { + every_character_war = { + limit = { + primary_defender = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + } + } + is_defender = scope:actor + NOR = { + any_war_attacker = { + is_allied_to = scope:recipient + } + any_war_attacker = { + this = scope:recipient + } + any_war_defender = { + this = scope:recipient + } + any_war_attacker = { + scope:recipient = { + has_truce = prev + } + } + } + } + add_defender = scope:recipient + } + #Lose legitimacy unless you're taking on a war too + if = { + limit = { + NOT = { + scope:recipient = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = scope:recipient + is_defender = scope:recipient + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_attacker = { + scope:actor = { + has_truce = prev + } + } + } + } + } + } + } + add_legitimacy = medium_legitimacy_loss + custom_tooltip = confederation_legitimacy_loss_war_tt + } + } + } + if = { + limit = { + scope:prestige_send_option = yes + } + scope:recipient = { + add_prestige = scope:actor.minor_prestige_value + } + } + if = { + limit = { + scope:herd_send_option = yes + } + scope:actor = { + pay_herd = { + target = scope:recipient + value = domicile.minor_herd_value + } + } + } + } + } + + on_decline = { + #Stop spamming players with this + if = { + limit = { + exists = scope:actor.confederation + scope:recipient = { + is_ai = no + } + } + scope:recipient = { + set_variable = { + name = refused_confederation + value = scope:actor.confederation + years = 3 + } + } + } + scope:actor = { + #letter response + trigger_event = mpo_interactions_events.0004 + } + } + + ai_potential = { + age >= 6 + OR = { + AND = { + is_independent_ruler = yes + highest_held_title_tier < tier_kingdom + has_character_flag = forming_confederation + } + is_confederation_member = yes + } + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + } + + ai_will_do = { + base = 50 + + modifier = { + add = 25 + scope:actor = { + confederation_neighboring_foe_trigger = { CHARACTER = scope:actor } + } + } + modifier = { + add = 25 + scope:recipient = { + confederation_neighboring_foe_trigger = { CHARACTER = scope:recipient } + } + } + modifier = { + add = -25 + scope:recipient = { + is_at_war = yes + } + } + modifier = { + factor = 0 + OR = { + #Will only throw the confederation into a war + scope:recipient = { + is_at_war = yes + NOR = { + any_character_war = { + primary_defender = scope:recipient + } + culture = scope:actor.culture + scope:actor.confederation = { + any_confederation_member = { + count >= 4 + highest_held_title_tier >= tier_county + } + } + reverse_opinion = { + target = scope:actor + value >= 30 + } + } + } + AND = { + exists = scope:actor.confederation + scope:recipient = { + has_variable = left_confederation + var:left_confederation ?= { + this = scope:actor.confederation + } + } + } + #Recipient hasn't been asked to join this confederation already + scope:recipient = { + has_variable = refused_confederation + exists = scope:actor.confederation + var:refused_confederation = { + this = scope:actor.confederation + } + } + } + } + } +} + +promote_divergent_or_hybrid_culture_interaction = { + category = interaction_category_diplomacy + icon = icon_culture + + desc = promote_divergent_or_hybrid_culture_interaction_desc + + ai_targets = { + ai_recipients = tributaries + ai_recipients = vassals + max = 10 + } + ai_frequency = 12 + popup_on_receive = yes + pause_on_receive = yes + + common_interaction = yes + + is_shown = { + scope:actor.domicile ?= { + domicile_uses_culture_and_faith = yes + domicile_culture = scope:actor.culture + } + scope:actor.culture ?= { + OR = { + is_hybrid_culture = yes + is_divergent_culture = yes + } + } + scope:recipient = { + trigger_if = { + limit = { + domicile ?= { domicile_uses_culture_and_faith = yes } + } + domicile.domicile_culture != scope:actor.culture + } + trigger_else = { + culture != scope:actor.culture + } + OR = { + is_tributary_of_suzerain_or_above = scope:actor + is_vassal_or_below_of = scope:actor + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + NOR = { + is_imprisoned_by = scope:actor + has_strong_hook = scope:actor + is_at_war_with = scope:actor + } + } + custom_tooltip = { + text = not_a_nomad_or_herder_tt + scope:recipient = { + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + trigger_if = { + limit = { + exists = scope:recipient.domicile + } + custom_tooltip = { + text = not_a_parent_culture_of_domicile_tt + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:recipient.domicile.domicile_culture + } + } + } + } + trigger_else = { + custom_tooltip = { + text = not_a_parent_culture_tt + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:recipient.culture + } + } + } + } + } + + greeting = positive + notification_text = PROMOTE_DIVERGENT_CULTURE_INTERACTION_NOTIFICATION + + ai_accept = { + base = -50 + + modifier = { + add = 1000 + scope:recipient = { + is_obedient_to = scope:actor + } + desc = MIGRATION_INTERACTION_OBEDIENT_ACCEPTANCE + } + + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + desc = AI_OPINION_REASON + } + + modifier = { + add = 20 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_3 + } + } + } + + modifier = { + add = 50 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_4 + } + } + } + + modifier = { + add = 100 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_5 + } + } + } + + # HERD + modifier = { + add = 60 + scope:herd_send_option = yes + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + # PRESTIGE + modifier = { + add = 60 + scope:prestige_send_option = yes + desc = PRESTIGE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + # Are you using a hook? + modifier = { + trigger = { + scope:hook ?= yes + } + add = 1000 + desc = LEGEND_HOOK_USED + } + + modifier = { # Herder + add = 100 + desc = CONFEDERATION_HERDER_REASON + trigger = { + scope:recipient = { + government_has_flag = government_is_herder + } + } + } + } + + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { # Herd + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:actor.domicile = { herd >= minor_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_CONFEDERATION + } + + send_option = { # Prestige + is_shown = { + always = yes + } + is_valid = { + scope:actor = { prestige >= minor_prestige_value } + } + flag = prestige_send_option + localization = TRADE_PRESTIGE_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = no + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = promote_culture_accepted_tt + left_icon = scope:recipient + scope:recipient = { + if = { + limit = { + domicile ?= { domicile_uses_culture_and_faith = yes } + } + custom_tooltip = { + text = family_and_lands_convert_domicile_tt + every_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + culture = scope:recipient.domicile.domicile_culture + } + add_to_list = counties_to_convert + } + # Family at court also convert + every_close_or_extended_family_member = { + limit = { + is_courtier_of = scope:recipient + culture = scope:recipient.domicile.domicile_culture + } + add_to_list = spouses_and_family_to_convert + } + domicile = { + set_domicile_culture = scope:actor.culture + } + } + } + else = { + custom_tooltip = { + text = family_and_lands_convert_tt + every_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + culture = scope:recipient.culture + } + add_to_list = counties_to_convert + } + # Family at court also convert + every_close_or_extended_family_member = { + limit = { + is_courtier_of = scope:recipient + culture = scope:recipient.culture + } + add_to_list = spouses_and_family_to_convert + } + } + } + if = { + limit = { + culture != scope:actor.culture + } + set_culture = scope:actor.culture + } + hidden_effect = { + every_in_list = { + list = counties_to_convert + set_county_culture = scope:actor.culture + } + every_in_list = { + list = spouses_and_family_to_convert + set_culture = scope:actor.culture + } + } + add_opinion = { + modifier = respect_opinion + opinion = 10 + target = scope:actor + } + } + } + if = { + limit = { + scope:prestige_send_option = yes + } + scope:actor = { + add_prestige = scope:actor.minor_prestige_loss + } + scope:recipient = { + add_prestige = scope:actor.minor_prestige_value + } + } + if = { + limit = { + scope:herd_send_option = yes + } + scope:actor = { + pay_herd = { + target = scope:recipient + value = domicile.minor_herd_value + } + } + } + if = { + limit = { + scope:hook = yes + } + use_hook = scope:recipient + } + } + } + + on_decline = { + scope:actor = { + } + } + + ai_potential = { + government_has_flag = government_is_nomadic + highest_held_title_tier >= tier_duchy + } + + ai_will_do = { + base = 100 + + modifier = { + add = -1 + scope:hook ?= yes + } + + modifier = { + factor = 0 + OR = { + scope:herd_send_option ?= yes + scope:prestige_send_option ?= yes + } + } + } +} + +inspire_conversion_interaction = { + category = interaction_category_religion + icon = government_type_nomad + + desc = inspire_conversion_interaction_desc + + ai_targets = { + ai_recipients = tributaries + ai_recipients = vassals + max = 10 + } + ai_frequency = 12 + cooldown_against_recipient = { years = 5 } + popup_on_receive = yes + pause_on_receive = yes + + common_interaction = yes + + is_shown = { + scope:actor.domicile ?= { + domicile_uses_culture_and_faith = yes + } + scope:recipient = { + OR = { + trigger_if = { + limit = { + domicile ?= { domicile_uses_culture_and_faith = yes } + } + domicile.domicile_faith != scope:actor.domicile.domicile_faith + } + faith != scope:actor.domicile.domicile_faith + faith != scope:actor.faith # Tooltip reasons + } + OR = { + is_tributary_of_suzerain_or_above = scope:actor + is_vassal_or_below_of = scope:actor + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + NOR = { + is_imprisoned_by = scope:actor + has_strong_hook = scope:actor + is_at_war_with = scope:actor + } + } + custom_description = { + text = "is_head_of_religion" + subject = scope:recipient + NOT = { scope:recipient.faith.religious_head = scope:recipient } + } + custom_description = { + text = "is_protected_via_contract" + subject = scope:recipient + NAND = { # Vassal Contract forbids meddling by liege + exists = scope:recipient.liege + scope:recipient.liege = scope:actor + scope:recipient = { + is_ruler = yes + vassal_contract_has_flag = religiously_protected + } + } + } + custom_tooltip = { + text = you_are_not_of_your_domicile_faith_tt + scope:recipient = { + OR = { + trigger_if = { + limit = { + domicile ?= { domicile_uses_culture_and_faith = yes } + } + domicile.domicile_faith != scope:actor.domicile.domicile_faith + } + faith != scope:actor.domicile.domicile_faith + } + } + } + custom_tooltip = { + text = not_a_nomad_or_herder_tt + scope:recipient = { + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + } + + greeting = positive + notification_text = INSPIRE_CONVERSION_INTERACTION_NOTIFICATION + + ai_accept = { + base = -50 + + modifier = { + add = 1000 + scope:recipient = { + is_obedient_to = scope:actor + } + desc = MIGRATION_INTERACTION_OBEDIENT_ACCEPTANCE + } + + modifier = { + desc = ASK_FOR_CONVERSION_RECIPIENT_IS_ZEALOUS + add = -100 + scope:recipient = { + has_trait = zealous + } + } + + modifier = { + desc = INSPIRE_UNREFORMED_FAITH + add = -50 + scope:actor.faith = { has_doctrine_parameter = unreformed } + } + + modifier = { + add = 50 + desc = ZEALOUS_PROSELYTIZER_REASON + trigger = { + scope:actor = { + has_perk = zealous_proselytizer_perk + } + } + } + + modifier = { + add = 20 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_3 + } + } + } + + modifier = { + add = 50 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_4 + } + } + } + + modifier = { + add = 100 + desc = NOMADIC_AUTHORITY_POSITIVE_REASON + trigger = { + scope:actor = { + has_realm_law = nomadic_authority_5 + } + } + } + + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + desc = AI_OPINION_REASON + } + + # HERD + modifier = { + add = 60 + scope:herd_send_option = yes + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + # PIETY + modifier = { + add = 60 + scope:piety_send_option = yes + desc = PIETY_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + # Are you using a hook? + modifier = { + trigger = { + scope:hook ?= yes + } + add = 1000 + desc = LEGEND_HOOK_USED + } + + modifier = { # Herder + add = 100 + desc = CONFEDERATION_HERDER_REASON + trigger = { + scope:recipient = { + government_has_flag = government_is_herder + } + } + } + } + + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { # Herd + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:actor.domicile = { herd >= minor_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_CONFEDERATION + } + + send_option = { # Piety + is_shown = { + always = yes + } + is_valid = { + scope:actor = { piety >= medium_piety_value } + } + flag = piety_send_option + localization = TRADE_PRESTIGE_FOR_BETTER_AI_ACCEPTANCE_ICON + } + + send_options_exclusive = no + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = inspire_conversion_accepted_tt + left_icon = scope:recipient + scope:recipient = { + if = { + limit = { + domicile ?= { domicile_uses_culture_and_faith = yes } + } + custom_tooltip = { + text = family_and_lands_inspire_domicile_tt + every_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + culture = scope:recipient.domicile.domicile_culture + faith != scope:actor.domicile.domicile_faith + } + add_to_list = counties_to_convert + } + # Family at court also convert + every_close_or_extended_family_member = { + limit = { + is_courtier_of = scope:recipient + faith != scope:actor.domicile.domicile_faith + } + add_to_list = spouses_and_family_to_convert + } + domicile = { + if = { + limit = { + domicile_faith != scope:actor.domicile.domicile_faith + } + set_domicile_faith = scope:actor.domicile.domicile_faith + } + } + } + } + else = { + custom_tooltip = { + text = family_and_lands_inspire_tt + every_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + culture = scope:recipient.culture + faith != scope:actor.domicile.domicile_faith + } + add_to_list = counties_to_convert + } + # Family at court also convert + every_close_or_extended_family_member = { + limit = { + is_courtier_of = scope:recipient + faith != scope:actor.domicile.domicile_faith + } + add_to_list = spouses_and_family_to_convert + } + } + } + if = { + limit = { + faith != scope:actor.domicile.domicile_faith + } + set_character_faith = scope:actor.domicile.domicile_faith + } + hidden_effect = { + every_in_list = { + list = counties_to_convert + set_county_faith = scope:actor.domicile.domicile_faith + } + every_in_list = { + list = spouses_and_family_to_convert + set_character_faith = scope:actor.domicile.domicile_faith + } + } + if = { # If you have the Religious Icon perk they become obedient + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + has_perk = religious_icon_perk + } + scope:recipient = { + obedience_target = scope:actor + is_obedient = no + } + } + scope:recipient = { + add_opinion = { + modifier = obedience_opinion + target = scope:actor + } + } + } + else = { + add_opinion = { + modifier = respect_opinion + opinion = 10 + target = scope:actor + } + } + } + } + if = { + limit = { + scope:piety_send_option = yes + } + scope:actor = { + add_piety = scope:actor.medium_piety_loss + } + scope:recipient = { + add_piety = scope:actor.medium_piety_value + } + } + if = { + limit = { + scope:herd_send_option = yes + } + scope:actor = { + pay_herd = { + target = scope:recipient + value = domicile.minor_herd_value + } + } + } + } + } + + on_decline = { + scope:actor = { + } + } + + ai_potential = { + government_has_flag = government_is_nomadic + highest_held_title_tier >= tier_duchy + NOR = { + any_owned_story = { + OR = { + story_type = story_mongol_invasion + story_type = story_greatest_of_khans + + } + } + mpo_has_gok_mongol_empire_trigger = yes + } + } + + ai_will_do = { + base = 100 + + modifier = { + add = -1 + scope:hook ?= yes + } + + modifier = { + add = -1 + scope:piety_send_option ?= yes + } + + modifier = { + factor = 0 + scope:herd_send_option ?= yes + } + } +} + +# Used by AI code +migration_interaction = { + interface_priority = 120 + common_interaction = yes + use_diplomatic_range = no + category = interaction_debug_main + icon = herd_interaction + hidden = yes + + # Keep AI reply at minimum - don't change default values + # ai_min_reply_days = 0 + # ai_max_reply_days = 0 + + can_send_despite_rejection = yes + + interface = migration + special_interaction = migration + + cost = { + # Free + } + + desc = migration_interaction_desc + + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + trigger_if = { + limit = { + is_ai = yes + } + is_at_war = no + } + highest_held_title_tier >= tier_county + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_imprisoned = no + is_independent_ruler = yes + is_travelling = no + custom_tooltip = { + text = no_primary_wars_tt + NOT = { + any_character_war = { + OR = { + primary_attacker = { this = scope:actor } + primary_defender = { this = scope:actor } + } + } + } + } + custom_tooltip = { + text = must_have_migration_situation_tt + any_character_situation = { + any_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + NOT = { exists = involved_activity } + } + scope:recipient = { + is_ruler = yes + NOR = { + is_allied_to = scope:actor + has_truce = scope:actor + } + } + } + + # can_be_picked_title is unused for migration_interaction and controlled by code + # can_be_picked_title = {} + + on_accept = { + scope:actor = { + if = { + limit = { + is_ai = yes + } + set_variable = { + name = migration_cooldown + years = migration_cooldown_value + } + } + # We add a variable in case you're migrating into a Tributary, for special event Options + if = { + limit = { + scope:recipient = { + is_tributary = yes + NOT = { is_tributary_of_suzerain_or_above = scope:actor } # They're not your Tributary + } + trigger_if = { + limit = { exists = scope:actor.overlord } + scope:recipient.overlord != scope:actor.overlord # You're not subjects of the same ruler already + } + } + set_variable = { + name = migrating_into_tributary_var + value = scope:recipient.overlord + } + } + if = { + limit = { + is_confederation_member = yes + } + confederation = { + save_scope_as = confederation_left + } + confederation_migration_notification_effect = yes + confederation = { + remove_confederation_member = scope:actor + } + } + # Pay what you need to pay first + if = { + limit = { scope:hook = yes } + use_hook = scope:recipient + } + if = { + limit = { scope:gold_cost = yes } + pay_short_term_gold = { + target = scope:recipient + gold = medium_gold_value + } + } + if = { + limit = { scope:herd_cost = yes } + pay_herd = { + target = scope:recipient + value = domicile.medium_herd_value + } + } + if = { + limit = { + exists = scope:target_title + } + set_variable = { + name = migration_title + value = scope:target_title + } + } + + # Save your old lands + save_scope_as = old_holder + capital_county = { save_scope_as = old_capital_county } + every_held_title = { + limit = { + tier = tier_county + exists = duchy + culture = scope:actor.domicile.domicile_culture + } + add_to_list = old_held_titles + } + + # Make a new culture appear in the lands you left behind, as you're bringing _your_ people with you + # Delay the creation so that Herders have spawned + trigger_event = { + id = mpo_misc.0001 + delayed = yes + } + + # Let's migrate! + # If there's a Drought, your people get a morale boost + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_migration_morale_boost + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + } + custom_tooltip = { + text = mpo_the_great_steppe_migration_morale_boost_effect_tt + every_courtier_or_guest = { + add_opinion = { + target = prev + modifier = drought_migration_opinion + } + } + } + } + + if = { + limit = { + exists = scope:target_title + } + custom_tooltip = mpo_steppe_migration_migrate_to_tt + custom_tooltip = mpo_steppe_migration_lose_land_tt + every_vassal = { + limit = { + OR = { + is_ai = no + NOT = { is_obedient_to = scope:actor } + } + } + hidden_effect = { + break_subject_contract_and_establish_tributary_effect = { + SUZERAIN = scope:actor + TRIBUTARY = this + } + } + custom_tooltip = mpo_steppe_migration_lose_vassal_tt + } + } + # Obedient vassals follow their liege + every_vassal = { + limit = { + exists = scope:target_title + is_obedient_to = scope:actor + is_ai = yes + } + save_scope_as = current_vassal + custom_tooltip = mpo_steppe_migration_keep_vassal_tt + hidden_effect = { + start_travel_plan = { + destination = scope:target_title.title_capital_county.title_province + return_trip = no + travel_with_domicile = yes + } + migration_set_obedient_vassal_effect = yes + } + } + # Player and non obedient vassals get turned into Tributaries instead + every_vassal = { + limit = { + exists = scope:target_title + OR = { + NOT = { is_obedient_to = scope:actor } + is_ai = no + } + } + break_subject_contract_and_establish_tributary_effect = { SUZERAIN = scope:actor TRIBUTARY = prev } + } + # Migration travel is handled by code + } + } + + on_decline = { + # We add a variable in case you're migrating into a Tributary, for special event Options + if = { + limit = { + scope:recipient = { + is_tributary = yes + suzerain != scope:actor # They're not your tributary + } + trigger_if = { + limit = { exists = scope:actor.overlord } + scope:recipient.overlord != scope:actor.overlord # You're not subjects of the same ruler already + } + } + scope:actor = { + set_variable = { + name = migrating_into_tributary_war_var + value = scope:recipient.overlord + } + } + } + # Migration wars are handled by code + scope:actor = { + if = { + limit = { + is_confederation_member = yes + } + confederation_migration_notification_effect = yes + confederation = { + remove_confederation_member = scope:actor + } + } + every_vassal = { + limit = { + exists = scope:target_title + is_obedient_to = scope:actor + is_ai = yes + } + save_scope_as = current_vassal + hidden_effect = { + migration_set_obedient_vassal_effect = yes + } + } + } + } + + # Use gold + send_option = { + flag = gold_cost + is_valid = { + scope:actor.gold >= scope:actor.medium_gold_value + } + localization = TRADE_GOLD_FOR_BETTER_MIGRATION_AI_ACCEPTANCE + } + + # Use Herd + send_option = { + is_shown = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + is_valid = { + scope:actor = { + domicile ?= { herd >= medium_herd_value } + } + } + flag = herd_cost + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE + } + + # Use hook + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + ai_accept = { + base = 0 + modifier = { + add = { + value = -95 + if = { #Non-Nomads should try to keep their lands + limit = { + scope:recipient = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + add = -405 + } + } + desc = MIGRATION_INTERACTION_BASE_ACCEPTANCE + } + modifier = { # Easier for AI to migrate peacefully since they can't send Herd/Gold + add = 50 + trigger = { + scope:recipient = { is_ai = yes } + scope:actor = { is_ai = yes } + } + desc = MIGRATION_INTERACTION_ACCEPTANCE_AI + } + modifier = { # Herders move away immediately + trigger = { + scope:recipient = { government_has_flag = government_is_herder } + } + add = 150 + desc = MIGRATION_INTERACTION_HERDER + } + modifier = { # Dukes don't really want to move + trigger = { + scope:recipient = { + has_realm_law = nomadic_authority_3 + } + } + add = -20 + desc = MIGRATION_INTERACTION_HIGH_DOMINANCE + } + modifier = { # Kingdoms/Empires don't want to move + trigger = { + scope:recipient = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + } + add = -100 + desc = MIGRATION_INTERACTION_HIGH_DOMINANCE + } + # Are you using a hook? + modifier = { + trigger = { + scope:hook ?= yes + } + add = 100 + desc = MIGRATION_HOOK_USED + } + # Are you using Gold? + modifier = { + trigger = { + scope:gold_cost ?= yes + } + add = 25 + desc = TRADE_GOLD_FOR_BETTER_AI_ACCEPTANCE_TT + } + # Are you using Herd? + modifier = { + trigger = { + scope:herd_cost ?= yes + } + add = 25 + desc = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_TT + } + # Is there a Drought? + modifier = { + add = 15 + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_migration_acceptance_boost + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + desc = MIGRATION_INTERACTION_DROUGHT_ACCEPTANCE + } + # Recipient traits + modifier = { + add = 15 + scope:recipient = { + has_trait = craven + } + desc = MIGRATION_INTERACTION_CRAVEN_ACCEPTANCE + } + modifier = { + add = 15 + scope:recipient = { + has_trait = content + } + desc = MIGRATION_INTERACTION_CONTENT_ACCEPTANCE + } + # Recipient's opinion + opinion_modifier = { + trigger = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + } + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + desc = MIGRATION_INTERACTION_OPINION_ACCEPTANCE + } + opinion_modifier = { + trigger = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + } + opinion_target = scope:actor + who = scope:recipient + multiplier = 0.5 + desc = MIGRATION_INTERACTION_OPINION_ACCEPTANCE + } + # Recipient's relation to you + modifier = { + scope:recipient = { + has_relation_friend = scope:actor + } + add = { + value = 25 + if = { + limit = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + } + add = 50 + } + } + desc = MIGRATION_INTERACTION_FRIEND_ACCEPTANCE + } + modifier = { + scope:recipient = { + has_relation_blood_brother = scope:actor + } + add = { + value = 50 + if = { + limit = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + } + add = 50 + } + } + desc = MIGRATION_INTERACTION_BLOOD_BROTHERS_ACCEPTANCE + } + # Obedience + modifier = { + scope:recipient = { + is_obedient_to = scope:actor + } + add = { + value = 50 + if = { + limit = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + } + add = 50 + } + } + desc = MIGRATION_INTERACTION_OBEDIENT_ACCEPTANCE + } + # Relative Prestige + modifier = { + add = 10 + prestige_level >= scope:recipient.prestige_level + desc = MIGRATION_INTERACTION_PRESTIGE_ACCEPTANCE + } + # Relative Prowess + modifier = { + add = 10 + prowess >= scope:recipient.prowess + desc = MIGRATION_INTERACTION_PROWESS_ACCEPTANCE + } + # Relative Herd + modifier = { + trigger_if = { + exists = scope:recipient.domicile # Herders won't have a domicile + } + add = 25 + domicile.herd >= scope:recipient.domicile.herd + desc = MIGRATION_INTERACTION_HERD_ACCEPTANCE + } + # Gurkhan + modifier = { + add = -1000 + exists = situation:the_great_steppe + scope:recipient = { + this = situation:the_great_steppe.situation_top_herd + } + desc = MIGRATION_INTERACTION_GURKHAN_ACCEPTANCE + } + modifier = { + add = 50 + trigger_if = { + exists = situation:the_great_steppe + } + scope:actor = { + this = situation:the_great_steppe.situation_top_herd + } + desc = MIGRATION_INTERACTION_GURKHAN_ACTOR_ACCEPTANCE + } + # Dread + modifier = { + add = intimidated_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + + # Events + modifier = { + add = 5 + scope:actor = { has_character_modifier = mpo_elder_flock_migrate_modifier } + desc = MIGRATION_INTERACTION_ELDER_FLOCK_ACCEPTANCE + } + + #Confederations refuse to be intimidated and don't want to leave + modifier = { + add = -300 + desc = CONFEDERATION_MEMBER_REASON + scope:recipient = { + is_confederation_member = yes + } + } + # High-tier Ruler + modifier = { + add = -500 + exists = scope:recipient.primary_title + scope:recipient.primary_title.tier >= tier_kingdom + desc = MIGRATION_INTERACTION_KING_ACCEPTANCE + } + + # Recently settled nomads don't want to accept + modifier = { + add = -1000 + desc = JUST_SETTLED_REASON + scope:recipient = { + is_tributary = yes + NOT = { government_has_flag = government_is_herder } + capital_county = { + title_held_years < 3 + } + } + } + } + + ai_instant_response = yes + + # Available scopes and values + # + # scope:actor - migrating ruler + # scope:recipient - ruler who decides if migration is peaceful or hostile + # scope:target - main migration target - can be of any tier + # + # Additional scopes provided from code + # + # scope:domain - County or duchy that migrating ruler aims to get as their new domain. + # Can be the same as scope:target, if county of duchy-level migration + # + # scope:domain_fertility - Total current fertility of scope:domain - what actor is going to receive + # scope:target_fertility - Total current fertility of main migration target + # + # scope:defenders - Script list of all rulers who will be part of migration war if declined. + # It includes all rulers who are going to lose land - holder of main migration target and all rulers + # who has land in scope:domain + # + # scope:defender_power - combined max military power of all members in scope:defenders. + # It's power - i.e. scaled by regiments attack and toughness + # + ai_will_do = { + base = 0 + + # More likely to migrate to people you don't like + opinion_modifier = { + opinion_target = scope:recipient + multiplier = -0.25 + } + + # Bold, energetic characters are more likely to migrate + ai_value_modifier = { + ai_boldness = 0.25 + ai_energy = 0.25 + } + + # We substract your Fertility + modifier = { + add = { + value = scope:actor.current_domain_fertility + multiply = -1 + } + } + + # And we add the target realm's Fertility + modifier = { + add = scope:domain_fertility + } + + # Less likely to migrate into players + modifier = { + add = -25 + scope:recipient = { is_ai = no } + } + + # Can you win this war? + modifier = { + scope:actor.current_military_strength >= scope:defender_power + add = 10 + } + modifier = { + scope:actor.current_military_strength <= scope:defender_power + add = -30 + } + + # You're moving from a bad season to a good one + modifier = { + has_bad_season_nomadic_capital_character_trigger = { CHARACTER = scope:actor } + has_good_season_nomadic_capital_character_trigger = { CHARACTER = scope:recipient } + add = 10 + } + + # There's a very bad season in your area + modifier = { + scope:actor = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = scope:actor.capital_county + } + } + } + add = 100 + } + + # You are landless and your herd is starving + modifier = { + scope:actor = { + is_landed = no + } + add = 100 + } + + # The recipient is a Herder + modifier = { + scope:recipient = { government_has_flag = government_is_herder } + add = 10 + } + + # You have a hook on the recipient + modifier = { + scope:actor = { + has_usable_hook = scope:recipient + } + add = 25 + } + + # More likely to migrate with Low Dominance + modifier = { + scope:actor = { + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + add = 10 + } + modifier = { + exists = scope:target + scope:actor = { + scope:target.tier >= tier_kingdom + primary_title.tier < tier_kingdom + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + add = 100 + } + modifier = { + exists = scope:target + scope:actor = { + scope:target.tier >= tier_empire + primary_title.tier < tier_empire + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + add = 100 + } + modifier = { + scope:actor = { + primary_title.tier >= tier_kingdom + has_realm_law = nomadic_authority_3 + } + add = -90 + } + modifier = { + scope:actor = { + primary_title.tier >= tier_empire + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + add = -90 + } + + #You're in a confederation... you don't want to go anywhere + modifier = { + scope:actor = { + is_confederation_member = yes + has_character_flag = new_confederate + } + add = -100 + } + modifier = { + scope:actor = { + is_confederation_member = yes + NOT = { has_character_flag = new_confederate } + } + add = -30 + } + #The recipient is bordering your confederation (so you can rejoin) + modifier = { + scope:actor = { + is_confederation_member = yes + } + scope:recipient = { + highest_held_title_tier <= tier_duchy + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + is_member_of_confederation = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + } + } + add = 30 + } + + # Don't migrate somewhere where there's a disease or Havsaran Zud + modifier = { + factor = 0 + scope:domain = { + OR = { + AND = { + tier = tier_county + any_county_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + } + } + AND = { + tier = tier_county + any_county_province = { + any_province_epidemic = { + } + } + } + } + } + } + # Don't migrate into a domain that contains a vassal player + modifier = { + scope:domain = { + any_in_de_facto_hierarchy = { + holder ?= { + is_ai = no + is_independent_ruler = no + } + } + } + factor = 0 + } + # Don't be suicidal + modifier = { + factor = 0 + scope:defender_power >= scope:actor.twice_current_military_strength + } + modifier = { + factor = 0 + scope:defender_power >= 10 + scope:actor.current_military_strength <= 500 + } + # Do not downgrade your title + modifier = { + factor = 0 + exists = scope:target + scope:target.tier < scope:actor.primary_title.tier + } + # Tributaries want to stick close to their suzerain + modifier = { + factor = 0 + scope:actor = { + is_tributary = yes + } + scope:domain = { + NOR = { + holder ?= { + is_tributary_of_suzerain_or_above = scope:actor.suzerain + } + AND = { + tier = tier_county + any_neighboring_county = { + holder ?= { + is_tributary_of_suzerain_or_above = scope:actor.suzerain + } + } + } + any_in_de_jure_hierarchy = { + tier = tier_county + OR = { + holder ?= { + is_tributary_of_suzerain_or_above = scope:actor.suzerain + } + any_neighboring_county = { + holder ?= { + is_tributary_of_suzerain_or_above = scope:actor.suzerain + } + } + } + } + } + } + } + # Small AI nomads should only migrate to same-culture areas or right next to them, as everything else looks really bad. + modifier = { + factor = 0 + scope:actor = { + any_character_situation = { + this = situation:the_great_steppe + } + has_realm_law = nomadic_authority_1 + # If the character's culture does not exist outside of their realm, allow lenient migrations (otherwise small cultures get stuck) + culture = { + any_culture_county = { + holder.top_liege != scope:actor + } + } + } + scope:domain = { + NOR = { + AND = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + } + } + } + } + any_in_de_jure_hierarchy = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + } + } + } + } + } + } + } + # Slightly bigger nomads are also allowed to migrate into non-nomadic lands + modifier = { + factor = 0 + scope:actor = { + any_character_situation = { + this = situation:the_great_steppe + } + has_realm_law = nomadic_authority_2 + # If the character's culture does not exist outside of their realm, allow lenient migrations (otherwise small cultures get stuck) + culture = { + any_culture_county = { + holder.top_liege != scope:actor + } + } + } + scope:domain = { + NOR = { + AND = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + } + } + title_province = { + NOR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + any_in_de_jure_hierarchy = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + } + } + title_province = { + NOR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + } + } + } + # Big nomads move more freely, and the small ones will follow because they'll spread their culture there! + modifier = { + factor = 0 + scope:actor = { + any_character_situation = { + this = situation:the_great_steppe + } + NOR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + # If the character's culture does not exist outside of their realm, allow lenient migrations (otherwise small cultures get stuck) + culture = { + any_culture_county = { + holder.top_liege != scope:actor + } + } + capital_county = { + any_county_situation_sub_region = { + NOR = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + sub_region_current_phase = situation_steppe_severe_drought_season + sub_region_current_phase = situation_steppe_cold_zud_season + sub_region_current_phase = situation_steppe_white_zud_season + } + } + } + } + scope:domain = { + NOR = { + AND = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:actor.culture + } + culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:actor.culture + } + culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:county_culture_check.culture + } + } + } + } + title_province = { + NOR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + any_in_de_jure_hierarchy = { + tier = tier_county + save_temporary_scope_as = county_culture_check + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:actor.culture + } + culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:county_culture_check.culture + } + } + any_neighboring_county = { + OR = { + culture = scope:actor.culture + culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:actor.culture + } + culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:actor.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + this = scope:county_culture_check.culture + } + } + scope:actor.culture = { + any_parent_culture_or_above = { + has_same_culture_heritage = scope:county_culture_check.culture + } + } + } + } + title_province = { + NOR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + } + } + } + } +} + +# PAIZA +mpo_interaction_grant_paiza = { + category = interaction_category_diplomacy + icon = paiza_interaction + common_interaction = no + + desc = mpo_interaction_grant_paiza_desc + + ai_frequency = 8 + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:actor = { + has_character_flag = established_paiza_system + exists = situation:the_great_steppe + any_character_situation = { + this = situation:the_great_steppe + } + government_has_flag = government_is_nomadic + } + scope:recipient = { + government_has_flag = government_is_nomadic + OR = { + is_vassal_of = scope:actor + is_tributary_of = scope:actor + is_courtier_of = scope:actor + } + } + } + + cooldown_against_recipient = { years = 10 } + + is_valid_showing_failures_only = { + scope:actor = { + NOT = { + is_at_war_with = scope:recipient + } + is_independent_ruler = yes + custom_tooltip = { + text = mpo_character_interaction_gurkhan + is_gurkhan = yes + } + custom_tooltip = { + text = mpo_character_interaction_established_paiza_system + has_character_flag = established_paiza_system + } + } + scope:recipient = { + custom_tooltip = { + text = mpo_character_interaction_obedient + NOT = { is_obedient_to = scope:actor } + } + NOT = { + any_character_artifact = { + scope:recipient = { can_benefit_from_artifact = prev } + scope:artifact.var:paiza_patron ?= { is_gurkhan = yes } + scope:artifact.var:paiza_patron ?= scope:actor + } + } + } + } + + cost = { + prestige = major_prestige_value + gold = 25 + } + + on_accept = { + make_obedient_recipient_to_actor_effect = yes + scope:recipient = { + mpo_create_paiza_artifact_effect = { + PATRON = scope:actor + GRANTEE = scope:recipient + } + custom_tooltip = mpo_establish_paiza_system_decision.paiza_abuse_authority_unlocked + custom_tooltip = mpo_establish_paiza_system_decision.leverage_khan_authority_unlocked + } + scope:actor = { + switch = { + trigger = scope:recipient.primary_title.tier + tier_empire = { + add_legitimacy_effect = { LEGITIMACY = massive_legitimacy_gain } + } + tier_kingdom = { + add_legitimacy_effect = { LEGITIMACY = major_legitimacy_gain } + } + tier_duchy = { + add_legitimacy_effect = { LEGITIMACY = medium_legitimacy_gain } + } + tier_county = { + add_legitimacy_effect = { LEGITIMACY = miniscule_legitimacy_gain } + } + } + } + } + + ai_targets = { + ai_recipients = vassals + ai_recipients = tributaries + } + + + ai_accept = { + base = -20 + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 1 + } + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + modifier = { + add = 40 + scope:recipient = { + ai_honor < 0 + ai_greed > 0 + } + desc = will_abuse_paiza_reason + } + } + + ai_will_do = { + base = 10 + + modifier = { + factor = 10 + scope:recipient = { + is_ai = no + OR = { + is_vassal_of = scope:actor + is_tributary_of = scope:actor + } + } + } + + modifier = { + factor = 10 + scope:recipient = { + NOT = { + is_obedient_to = root + } + OR = { + is_powerful_vassal = yes + is_kurultai_trigger = yes + } + } + } + } +} + +mpo_interaction_ask_for_paiza = { + category = interaction_category_diplomacy + icon = paiza_interaction + common_interaction = no + + desc = mpo_interaction_ask_for_paiza_desc + + ai_frequency = 12 + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:recipient = { + government_has_flag = government_is_nomadic + has_character_flag = established_paiza_system + } + scope:actor = { + OR = { + government_has_flag = government_is_nomadic + top_liege = scope:recipient + } + NOT = { + is_at_war_with = scope:recipient + } + } + } + + cooldown_against_recipient = { years = 10 } + + is_valid_showing_failures_only = { + scope:recipient = { + is_independent_ruler = yes + is_gurkhan = yes + } + scope:actor = { + custom_tooltip = { + text = already_received_a_paiza + NOT = { + any_character_artifact = { + scope:actor = { can_benefit_from_artifact = prev } + var:paiza_patron ?= scope:recipient + } + } + } + } + } + + send_options_exclusive = no + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { # Herd + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:actor.domicile = { herd >= scope:recipient.domicile.massive_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_CONFEDERATION + } + + on_accept = { + scope:actor = { + make_obedient_recipient_to_actor_effect = yes + send_interface_toast = { + type = event_toast_effect_good + title = mpo_decisions_events.paiza_granted + mpo_create_paiza_artifact_effect = { + PATRON = scope:recipient + GRANTEE = scope:actor + } + left_icon = scope:recipient + right_icon = scope:created_paiza + } + custom_tooltip = mpo_establish_paiza_system_decision.paiza_abuse_authority_unlocked + custom_tooltip = mpo_establish_paiza_system_decision.leverage_khan_authority_unlocked + if = { + limit = { + scope:herd_send_option = yes + } + pay_herd = { + target = scope:recipient + value = scope:recipient.domicile.massive_herd_value + } + } + if = { + limit = { + scope:hook = yes + } + use_hook = scope:recipient + } + } + scope:recipient = { + switch = { + trigger = scope:actor.primary_title.tier + tier_empire = { + add_legitimacy_effect = { LEGITIMACY = massive_legitimacy_gain } + } + tier_kingdom = { + add_legitimacy_effect = { LEGITIMACY = major_legitimacy_gain } + } + tier_duchy = { + add_legitimacy_effect = { LEGITIMACY = medium_legitimacy_gain } + } + tier_county = { + add_legitimacy_effect = { LEGITIMACY = miniscule_legitimacy_gain } + } + } + add_character_flag = { + flag = paiza_recently_granted + years = 2 + } + } + } + + on_decline = { + scope:recipient = { + add_character_flag = { + flag = paiza_recently_granted + years = 4 + } + } + } + + ai_accept = { + base = -60 + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + modifier = { + add = 40 + scope:actor = { + NOT = { + is_obedient_to = root + } + OR = { + is_powerful_vassal = yes + is_kurultai_trigger = yes + } + } + desc = AI_NOT_OBEDIENT_REVERSE_REASON + } + modifier = { + add = -20 + scope:actor = { + is_obedient_to = scope:recipient + } + desc = AI_OBEDIENT_REVERSE_REASON + } + modifier = { + scope:recipient = { + has_relation_blood_brother = scope:actor + } + add = 100 + desc = MIGRATION_INTERACTION_BLOOD_BROTHERS_ACCEPTANCE + } + + modifier = { + trigger = { + scope:hook ?= yes + } + add = 60 + desc = LEGEND_HOOK_USED + } + + modifier = { + add = 20 + trigger = { + scope:herd_send_option ?= yes + } + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 0.4 + } + } + + ai_potential = { + is_adult = yes + highest_held_title_tier >= tier_duchy + } + + ai_will_do = { + base = 0 + + modifier = { + add = 100 + scope:recipient = { + has_relation_blood_brother = scope:actor + } + } + + modifier = { + add = { + value = scope:actor.ai_greed + multiply = 0.1 + } + scope:actor = { + ai_greed > 0 + } + } + + modifier = { + add = { + value = scope:actor.primary_title.tier + subtract = scope:recipient.primary_title.tier + multiply = 10 + max = 0 + } + } + + modifier = { + add = { + value = scope:actor.ai_honor + multiply = 0.1 + } + scope:actor = { + ai_honor > 0 + } + } + + ai_value_modifier = { + ai_boldness = -0.4 + ai_honor = 0.1 + ai_greed = 0.1 + ai_energy = -0.2 + } + + modifier = { + factor = 0 + scope:recipient = { + has_character_flag = paiza_recently_granted + } + } + } + + ai_targets = { + ai_recipients = liege + ai_recipients = suzerain + } +} + +mpo_interaction_leverage_khan_authority = { + category = interaction_category_hostile + icon = paiza_interaction + common_interaction = no + + desc = mpo_interaction_leverage_khan_authority_desc + + ai_frequency = 8 + popup_on_receive = yes + pause_on_receive = yes + + cooldown = { months = 6 } + + cooldown_against_recipient = { years = 10 } + + is_shown = { + scope:actor = { + any_character_artifact = { + scope:actor = { can_benefit_from_artifact = prev } + has_variable = paiza_patron + OR = { + scope:recipient.top_liege = var:paiza_patron + scope:recipient = { + is_independent_ruler = yes + primary_title.tier < scope:actor.primary_title.tier + government_has_flag = government_is_nomadic + } + scope:recipient = { + liege = { + OR = { + government_has_flag = government_is_nomadic + scope:recipient.top_liege = prev.var:paiza_patron + } + } + } + } + } + NOT = { + has_character_flag = established_paiza_system + } + } + scope:recipient = { + is_ai = yes + is_gurkhan = no + age >= 12 + NOT = { + has_character_flag = established_paiza_system + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + custom_tooltip = { + text = mpo_abuse_authority_paiza_decision.no_more_paiza_abuse + NOT = { has_character_flag = no_more_paiza_abuse } + } + custom_tooltip = { + text = mpo_abuse_authority_paiza_decision.paiza_patron_not_topdog + any_character_artifact = { + scope:actor = { can_benefit_from_artifact = prev } + exists = var:paiza_patron + var:paiza_patron ?= { + is_gurkhan = yes + } + } + } + NOT = { + is_at_war_with = scope:recipient + } + } + } + + ai_accept = { + base = -60 + modifier = { + add = 10 + has_trait = craven + desc = BLACKMAIL_INTERACTION_CRAVEN_ACCEPTANCE + } + modifier = { + add = -20 + has_trait = arrogant + desc = BLACKMAIL_INTERACTION_ARROGANT_ACCEPTANCE + } + modifier = { + add = -20 + has_trait = brave + desc = BLACKMAIL_INTERACTION_BRAVE_ACCEPTANCE + } + modifier = { + add = -20 + has_trait = paranoid + desc = BLACKMAIL_INTERACTION_PARANOID_ACCEPTANCE + } + modifier = { + add = { + value = scope:recipient.intrigue + multiply = -2 + } + desc = INDEBT_GUEST_INTRIGUE_RECIPIENT + } + modifier = { + add = { + value = scope:actor.intrigue + } + desc = INDEBT_GUEST_INTRIGUE_ACTOR + } + modifier = { + add = { + value = scope:actor.dread + divide = 2 + } + scope:actor.dread >= 2 + desc = offer_vassalization_interaction_aibehavior_dreaded_tt + } + opinion_modifier = { + opinion_target = situation:the_great_steppe.situation_top_herd + who = scope:recipient + multiplier = 0.4 + } + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 0.2 + } + } + + ai_will_do = { + base = -40 + modifier = { + add = 30 + domicile ?= { herd <= twenty_percent_herd_value } + } + modifier = { + add = 10 + domicile ?= { herd <= sixty_percent_herd_value } + } + modifier = { + add = 10 + has_trait = greedy + } + modifier = { + add = 10 + has_trait = wrathful + } + modifier = { + add = 10 + has_trait = ambitious + } + } + + ai_targets = { + ai_recipients = peer_vassals + } + + on_accept = { + scope:actor = { + send_interface_toast = { + left_icon = scope:recipient + right_icon = situation:the_great_steppe.situation_top_herd + title = mpo_interaction_leverage_khan_authority + make_obedient_recipient_to_actor_effect = yes + scope:recipient = { + pay_short_term_gold = { + target = scope:actor + gold = { + value = current_gold_value + divide = 2 + } + } + if = { + limit = { + government_has_flag = government_is_nomadic + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + pay_herd = { + target = scope:actor + value = { + value = domicile.herd + multiply = 0.5 + } + } + } + } + if = { + limit = { + scope:recipient = { + OR = { + is_landed = yes + } + } + } + add_prestige = medium_prestige_value + } + else = { + add_prestige = minor_prestige_value + } + } + } + + scope:actor = { + random_character_artifact = { + limit = { + scope:actor = { can_benefit_from_artifact = prev } + has_variable = paiza_patron + } + var:paiza_patron = { + scope:actor = { + mpo_paiza_abuse_counter_effect = { + PAIZA_PATRON = prev + PAIZA_ABUSER = scope:actor + } + } + } + } + + } + } +} + +# Interrogate +# Used in the Ill-Advised event chain - nomad_events.0001 - 0099 +interrogate_interaction = { + category = interaction_category_hostile + icon = icon_scheme_challenge_status + common_interaction = no + + auto_accept = yes + + desc = interrogate_interaction_desc + + is_shown = { + scope:actor = { has_variable = can_interrogate_var } + scope:recipient = { + is_target_in_variable_list = { + name = valid_to_interrogate_var + target = scope:actor + } + } + # And Achmach is still around + scope:actor = { + any_courtier_or_guest = { + has_variable = achmach_loyalty + } + } + } + + cooldown_against_recipient = { years = 10 } + + on_accept = { + scope:actor = { + custom_tooltip = interrogate_interaction_tt + trigger_event = nomad_events.0006 + } + scope:recipient = { + custom_tooltip = interrogate_interaction_recipient_tt + } + } + + ai_will_do = { + base = 100 + } +} + +# Steal Herd +steal_herd_interaction = { + icon = icon_scheme_steal_herd + interface_priority = 90 + common_interaction = yes + category = interaction_category_hostile + + send_name = START_SCHEME + + scheme = steal_herd + ignores_pending_interaction_block = yes + + is_shown = { + NOT = { scope:recipient = scope:actor } + scope:actor = { + is_landed = yes + is_adult = yes + is_imprisoned = no + government_has_flag = government_is_nomadic + in_diplomatic_range = scope:recipient + trigger_if = { + limit = { + is_ai = yes + } + NOR = { + is_tributary_of_suzerain_or_above = scope:recipient + is_vassal_or_below_of = scope:recipient + scope:recipient = { + is_ai = no + any_targeting_scheme = { + scheme_type = steal_herd + } + } + } + } + } + scope:recipient = { + is_landed = yes + is_adult = yes + government_has_flag = government_is_nomadic + highest_held_title_tier >= tier_county + } + } + + is_valid_showing_failures_only = { + scope:actor = { + can_start_scheme = { + type = steal_herd + target_character = scope:recipient + } + } + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + } + + desc = { + triggered_desc = { + trigger = { + scope:actor = { + can_start_scheme = { + type = steal_herd + target_character = scope:recipient + } + } + } + desc = scheme_interaction_tt_steal_herd_approved + } + } + + on_accept = { + scope:actor = { + stress_impact = { + compassionate = minor_stress_impact_gain + honest = minor_stress_impact_gain + craven = minor_stress_impact_gain + content = minor_stress_impact_gain + } + send_interface_toast = { + type = event_toast_effect_neutral + title = steal_herd_interaction_notification + + left_icon = scope:actor + right_icon = scope:recipient + + begin_scheme_basic_effect = { + SCHEME_TYPE = steal_herd + TARGET_TYPE = target_character + TARGET_SCOPE = scope:recipient + } + + if = { + limit = { + domicile ?= { herd >= ninety_percent_herd_value } + } + custom_tooltip = steal_herd_interaction_tt.warning + } + scope:new_scheme ?= { + if = { + limit = { + scope:steal_herd_low ?= yes + } + set_variable = steal_herd_low + } + else_if = { + limit = { + scope:steal_herd_normal ?= yes + } + set_variable = steal_herd_normal + } + else_if = { + limit = { + scope:steal_herd_high ?= yes + } + set_variable = steal_herd_high + } + } + } + } + } + + ai_potential = { + trigger_if = { + limit = { + NOT = { + domicile ?= { + has_domicile_building_or_higher = steal_herd_yurt_01 + } + } + } + ai_honor <= 50 + } + primary_title.tier >= tier_county + NOR = { + scheme_generic_ai_blocker_trigger = yes + primary_title = { + is_mercenary_company = yes + } + } + prestige >= medium_prestige_value # In case they fail + } + + auto_accept = yes + + ai_will_do = { + base = -30 + + modifier = { + add = 20 + domicile ?= { herd <= twenty_percent_herd_value } + } + + modifier = { + add = 20 + domicile ?= { herd <= sixty_percent_herd_value } + } + + modifier = { + add = { + value = intrigue + multiply = 3 + } + } + + modifier = { + add = { + value = ai_greed + multiply = -1 + } + } + modifier = { + add = { + value = ai_honor + multiply = -0.25 + } + } + modifier = { + scope:actor = { + has_trait = schemer + } + add = 60 + } + modifier = { + scope:actor = { + has_relation_rival = scope:recipient + } + add = 60 + } + modifier = { + scope:actor = { + has_relation_nemesis = scope:recipient + } + add = 150 + } + modifier = { + scope:actor = { + opinion = { + target = scope:recipient + value >= low_positive_opinion + } + ai_greed <= high_positive_ai_value + } + factor = 0 + } + modifier = { + scope:recipient = { + OR = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + is_obedient_to = scope:actor + } + } + factor = 0 + } + start_hostile_scheme_ai_base_modifiers = yes # At the end so Cowed can block it completely + } + + ai_targets = { + ai_recipients = scripted_relations + ai_recipients = neighboring_rulers + ai_recipients = peer_vassals + } + + # Options + options_heading = schemes.t.herd_amount + send_options_exclusive = yes + ## Steal a little herd + send_option = { + flag = steal_herd_low + current_description = steal_herd_interaction.tt.low + } + ## Steal a moderate amount of herd + send_option = { + flag = steal_herd_normal + current_description = steal_herd_interaction.tt.normal + } + ## Steal a lot of herd + send_option = { + flag = steal_herd_high + current_description = steal_herd_interaction.tt.high + } + + ai_frequency = 36 +} + +mpo_ask_for_herd_interaction = { + category = interaction_category_hostile + icon = demand_herd + desc = mpo_ask_for_herd_interaction_desc + interface_priority = 80 + common_interaction = yes + + ai_frequency = 8 + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + is_ai = yes + } + NOT = { + scope:actor = { + has_variable = had_mpo_temujin_flavor_0020 + var:had_mpo_temujin_flavor_0020 ?= scope:recipient + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + NOT = { + is_imprisoned = yes + } + } + scope:recipient = { + NOR = { + is_imprisoned = yes + is_at_war = yes + is_a_faction_member = yes + custom_description = { + text = ask_for_herd_not_enough_herd + domicile.herd < scope:recipient.domicile.ask_for_herd_base_value + government_has_flag = government_is_nomadic + } + } + } + } + + ai_potential = { + primary_title.tier >= tier_duchy + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { + is_valid = { + scope:recipient.domicile ?= { + herd > ask_for_herd_double_value + } + scope:recipient = { + NOT = { + government_has_flag = government_is_herder + } + } + } + flag = more_herd + localization = ASK_FOR_HERD_MORE_HERD + } + + send_options_exclusive = no + + ai_accept = { + base = -100 + modifier = { + trigger = { + scope:more_herd ?= yes + } + add = -100 + desc = ASK_FOR_HERD_MORE_HERD_REASON + } + modifier = { + trigger = { + scope:hook ?= yes + } + add = 1000 + desc = MIGRATION_HOOK_USED + } + modifier = { + add = { + value = ai_boldness + multiply = -1 + divide = 4 + } + NOT = { ai_boldness = 0 } + desc = ARTIFACT_BOLDNESS_REASON + } + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + desc = AI_OPINION_REASON + } + bp2_hostage_dread_modifier = yes + } + + ai_will_do = { + base = 0 + modifier = { + add = 20 + scope:actor.domicile.herd < scope:actor.domicile.ask_for_herd_double_value + } + } + + cooldown_against_recipient = { years = 6 } + + ai_targets = { + ai_recipients = vassals + ai_recipients = neighboring_rulers + ai_recipients = peer_vassals + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = ask_for_herd_toast + left_icon = scope:recipient + scope:recipient = { + # How much Herd are you getting? + if = { + limit = { + scope:more_herd ?= yes + } + if = { + limit = { + scope:actor = { has_variable = nomad_events_0210_herd_var } + } + pay_herd = { + target = scope:actor + value = { + value = scope:recipient.domicile.ask_for_herd_double_value + multiply = 2 + } + } + } + else = { + pay_herd = { + target = scope:actor + value = scope:recipient.domicile.ask_for_herd_double_value + } + } + } + else = { + if = { + limit = { + scope:actor = { has_variable = nomad_events_0210_herd_var } + } + pay_herd = { + target = scope:actor + value = { + value = scope:recipient.domicile.ask_for_herd_base_value + multiply = 2 + } + } + } + else = { + pay_herd = { + target = scope:actor + value = scope:recipient.domicile.ask_for_herd_base_value + } + } + } + # Extra Herd during the Abundant Grazing season + if = { + limit = { + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_demand_herd_higher_rate + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + } + custom_tooltip = { + text = ask_for_herd_abundant_grazing_tt + pay_herd = { + target = scope:actor + value = scope:recipient.domicile.ask_for_herd_half_value + } + } + } + # Now opinion maluses + if = { + limit = { + scope:more_herd ?= yes + } + if = { + limit = { + scope:recipient = { + has_dread_level_towards = { target = scope:actor level = 2 } + } + } + custom_tooltip = ask_for_herd_dread_effect_tt + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -20 + } + } + else_if = { + limit = { + scope:recipient = { + has_dread_level_towards = { target = scope:actor level = 1 } + } + } + custom_tooltip = ask_for_herd_dread_effect_tt + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -40 + } + } + else = { + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -60 + } + } + } + else = { + if = { + limit = { #herders cannot give you more herd + scope:recipient = { + government_has_flag = government_is_herder + } + } + scope:actor = { + change_herd = major_herd_gain + add_legitimacy = minor_legitimacy_loss + } + scope:recipient.primary_title = { + custom_tooltip = ask_for_herd_herder_recipient_tt + add_county_modifier = { + modifier = ask_for_herd_county_depleted_modifier + years = 12 + } + } + } + else = { + if = { + limit = { + scope:recipient = { + has_dread_level_towards = { target = scope:actor level = 2 } + } + } + custom_tooltip = ask_for_herd_dread_effect_tt + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -10 + } + } + else_if = { + limit = { + scope:recipient = { + has_dread_level_towards = { target = scope:actor level = 1 } + } + } + custom_tooltip = ask_for_herd_dread_effect_tt + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -20 + } + } + else = { + add_opinion = { + target = scope:actor + modifier = ask_for_herd_opinion + opinion = -40 + } + } + } + } + } + } + } + } +} + +### Demand Obedience +mpo_demand_obedience_interaction = { + category = interaction_category_vassal + icon = demand_obedience + desc = mpo_demand_obedience_interaction_desc + interface_priority = 80 + common_interaction = yes + + ai_frequency = 4 + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + } + scope:recipient = { + is_ai = yes + obedience_target ?= scope:actor + is_obedient = no + } + } + + is_valid_showing_failures_only = { + scope:actor = { + age >= 16 + is_physically_able = yes + NOT = { + is_at_war_with = scope:recipient + } + } + scope:actor = { dread >= medium_dread_value } + } + + cost = { prestige = minor_prestige_value } + + ai_potential = { + government_has_flag = government_is_nomadic + primary_title.tier >= tier_duchy + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + + send_options_exclusive = no + + ai_accept = { + base = -50 + modifier = { + trigger = { + scope:hook ?= yes + } + add = 100 + desc = MIGRATION_HOOK_USED + } + modifier = { + add = 10 + scope:actor = { has_realm_law = nomadic_authority_2 } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 20 + scope:actor = { has_realm_law = nomadic_authority_3 } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 50 + scope:actor = { has_realm_law = nomadic_authority_4 } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 100 + scope:actor = { has_realm_law = nomadic_authority_5 } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = -20 + scope:actor = { legitimacy_level = 1 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 10 + scope:actor = { legitimacy_level = 3 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 25 + scope:actor = { legitimacy_level = 4 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 50 + scope:actor = { legitimacy_level = 5 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = { + value = ai_boldness + multiply = -1 + divide = 4 + } + NOT = { ai_boldness = 0 } + desc = ARTIFACT_BOLDNESS_REASON + } + modifier = { + add = -20 + scope:recipient = { + has_trait = brave + } + desc = BLACKMAIL_INTERACTION_BRAVE_ACCEPTANCE + } + modifier = { + add = -50 + scope:recipient = { + has_trait = arrogant + } + desc = BLACKMAIL_INTERACTION_ARROGANT_ACCEPTANCE + } + modifier = { + add = -50 + scope:recipient = { + has_trait = disloyal + } + desc = DEMAND_OBEDIENCE_INTERACTION_DISLOYAL_ACCEPTANCE + } + modifier = { + add = 10 + scope:recipient = { + has_trait = craven + } + desc = BLACKMAIL_INTERACTION_CRAVEN_ACCEPTANCE + } + modifier = { + add = 10 + scope:recipient = { + has_trait = content + } + desc = DEMAND_OBEDIENCE_INTERACTION_CONTENT_ACCEPTANCE + } + modifier = { + add = 25 + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_easier_obedience + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + desc = DEMAND_OBEDIENCE_INTERACTION_ZUD_ACCEPTANCE + } + bp2_hostage_dread_modifier = yes + } + + ai_will_do = { + base = 0 + modifier = { + scope:actor = { dread >= major_dread_value } + add = 25 + } + modifier = { + scope:actor = { + any_councillor = { + is_kurultai_trigger = yes + NOT = { is_obedient_to = prev } + } + } + add = 25 + } + } + + cooldown_against_recipient = { years = 10 } + + ai_targets = { + ai_recipients = vassals + ai_recipients = courtiers + ai_recipients = tributaries + chance = 0.25 + } + + ai_targets = { # They will try to get a Stable Succession + ai_recipients = councillors + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = mpo_demand_obedience_interaction_toast + left_icon = scope:recipient + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = obedience_opinion + } + } + # Belligerent Vassal Opinion + if = { + limit = { + any_vassal = { has_vassal_stance = belligerent } + } + every_vassal = { + limit = { has_vassal_stance = belligerent } + custom = every_belligerent_vassal + add_opinion = { + modifier = impressed_opinion + target = scope:actor + opinion = 15 + } + } + } + } + } + } +} + +################## +# Refill MaA +################## + +refill_maa_nomad_interaction = { + icon = icon_soldier_survivor + category = interaction_debug_main + interface_priority = 20 + common_interaction = yes + desc = refill_maa_nomad_interaction_desc + cooldown = { months = 6 } + hidden = yes + + is_shown = { + has_mpo_dlc_trigger = yes + scope:actor = { + is_nomad = yes + government_allows = conditional_maa_refill + } + scope:recipient = scope:actor + } + + is_valid_showing_failures_only = { + custom_tooltip = { + text = reinforce_soldiers_any_regiment_tt + scope:actor.maa_regiments_count >= 1 + } + custom_tooltip = { + text = reinforce_soldiers_unfull_regiment_tt + scope:actor = { + any_maa_regiment = { maa_regiments_valid_to_refill_trigger = yes } + } + } + custom_tooltip = { + text = SUPPLY_LOSS_AT_SEA + scope:actor = { any_laamp_portion_at_sea_trigger = no } + } + custom_tooltip = { + text = REFILL_MAA_AT_WAR_TT + scope:actor = { + NOT = { + any_army = { + location.county.holder = { + OR = { + is_at_war_with = scope:actor + any_liege_or_above = { is_at_war_with = scope:actor } + } + } + } + } + } + } + } + + send_options_exclusive = yes + + send_option = { + flag = herd + localization = reinforce_soldiers_option_herd + is_valid = { + scope:actor.domicile.herd >= 5 + } + } + + send_option = { + flag = gold + localization = reinforce_soldiers_option_gold + is_valid = { + scope:actor.gold >= 5 + } + } + + on_accept = { + scope:actor = { + switch = { + trigger = yes + scope:gold = { + if = { + limit = { gold > replenishable_troops_payed_gold_tt_value } + custom_tooltip = refill_maa_gold_full_tt + } + else = { custom_tooltip = refill_maa_gold_tt } + custom_tooltip = refill_maa_gold_cost_tt + refill_maa_with_gold_effect = yes + } + scope:herd = { + if = { + limit = { domicile.herd > replenishable_troops_payed_herd_tt_value } + custom_tooltip = refill_maa_herd_full_tt + } + else = { custom_tooltip = refill_maa_herd_tt } + custom_tooltip = refill_maa_herd_cost_tt + refill_maa_with_herd_effect = yes + } + } + if = { + limit = { + is_ai = yes + NOR = { + scope:gold = yes + scope:herd = yes + } + } + refill_maa_with_herd_effect = yes + } + custom_tooltip = martial_skill_discount_tt + } + } + + ai_frequency = 1 + ai_targets = { + ai_recipients = self + } + ai_potential = { + is_nomad = yes + government_allows = conditional_maa_refill + any_maa_regiment = { maa_current_troops_count < maa_max_troops_count } + } + + ai_will_do = { + base = 100 + } +} + +### Commander Trait interaction for guardians +# actor = guardian +# recipient = ward/hostage +# This has to be update every time a new Commander trait is added to the game, otherwise you won't be able to pass it down +influence_child_commander_interaction = { + category = interaction_category_friendly + common_interaction = yes + interface_priority = 60 + icon = child + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + can_send_despite_rejection = yes + popup_on_receive = yes + pause_on_receive = yes + + pre_answer_maybe_key = ANSWER_MIGHT_SUCCEED + pre_answer_no_key = ANSWER_CANT_SUCCEED + pre_answer_yes_key = ANSWER_WILL_SUCCEED + pre_answer_maybe_breakdown_key = ANSWER_SUM_CHANCE + + desc = influence_child_commander_interaction_desc + + is_shown = { #any ai ward/hostage + has_mpo_dlc_trigger = yes + scope:recipient = { + is_ai = yes + is_adult = no + OR = { + scope:actor = { has_relation_ward = scope:recipient } + is_hostage_of = scope:actor + } + } + } + + is_valid_showing_failures_only = { + scope:recipient = { #be old enough to fight and don't have any commander traits yet + age >= 10 + number_of_commander_traits <= 1 + #checking all trait individually through the set scope in order to catch if all of your traits are either the same or opposite + trigger_if = { + limit = { + scope:actor = { + number_of_commander_traits > 0 + } + } + custom_description = { + text = influence_child_commander_interaction_all_same_traits + switch = { + trigger = yes + scope:logistician = { + scope:recipient = { NOT = { has_trait = logistician } } + } + scope:military_engineer = { + scope:recipient = { NOT = { has_trait = military_engineer } } + } + scope:aggressive_attacker = { + scope:recipient = { NOT = { has_trait = aggressive_attacker } } + } + scope:unyielding_defender = { + scope:recipient = { NOT = { has_trait = unyielding_defender } } + } + scope:forder = { + scope:recipient = { NOT = { has_trait = forder } } + } + scope:flexible_leader = { + scope:recipient = { NOT = { has_trait = flexible_leader } } + } + scope:desert_warrior = { + scope:recipient = { NOT = { has_trait = desert_warrior } } + } + scope:jungle_stalker = { + scope:recipient = { NOT = { has_trait = jungle_stalker } } + } + scope:reaver = { + scope:recipient = { NOT = { has_trait = reaver } } + } + scope:reckless = { + scope:recipient = { NOT = { has_trait = reckless } } + } + scope:holy_warrior = { + scope:recipient = { NOT = { has_trait = holy_warrior } } + } + scope:open_terrain_expert = { + scope:recipient = { NOT = { has_trait = open_terrain_expert } } + } + scope:rough_terrain_expert = { + scope:recipient = { NOT = { has_trait = rough_terrain_expert } } + } + scope:forest_fighter = { + scope:recipient = { NOT = { has_trait = forest_fighter } } + } + scope:cautious_leader = { + scope:recipient = { NOT = { has_trait = cautious_leader } } + } + scope:organizer = { + scope:recipient = { NOT = { has_trait = organizer } } + } + scope:winter_soldier = { + scope:recipient = { NOT = { has_trait = winter_soldier } } + } + } + } + } + is_physically_able = yes + } + scope:actor = { + is_adult = yes + number_of_commander_traits >= 1 + is_imprisoned = no + is_physically_able = yes + } + } + + cooldown_against_recipient = { years = 3 } + + can_send = { + } + #each option is shown if the actor has the corresponding trait and valid if recipient don't have it yet or don't have an opposite trait + send_option = { + is_shown = { + scope:actor = { has_trait = logistician } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = logistician + trait:logistician = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = logistician + localization = trait_logistician + } + send_option = { + is_shown = { + scope:actor = { has_trait = military_engineer } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = military_engineer + trait:military_engineer = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = military_engineer + localization = trait_military_engineer + } + send_option = { + is_shown = { + scope:actor = { has_trait = aggressive_attacker } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = aggressive_attacker + trait:aggressive_attacker = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = aggressive_attacker + localization = trait_aggressive_attacker + } + send_option = { + is_shown = { + scope:actor = { has_trait = unyielding_defender } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = unyielding_defender + trait:unyielding_defender = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = unyielding_defender + localization = trait_unyielding_defender + } + send_option = { + is_shown = { + scope:actor = { has_trait = forder } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = forder + trait:forder = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = forder + localization = trait_forder + } + send_option = { + is_shown = { + scope:actor = { has_trait = flexible_leader } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = flexible_leader + trait:flexible_leader = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = flexible_leader + localization = trait_flexible_leader + } + send_option = { + is_shown = { + scope:actor = { has_trait = desert_warrior } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = desert_warrior + trait:desert_warrior = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = desert_warrior + localization = trait_desert_warrior + } + send_option = { + is_shown = { + scope:actor = { has_trait = jungle_stalker } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = jungle_stalker + trait:jungle_stalker = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = jungle_stalker + localization = trait_jungle_stalker + } + send_option = { + is_shown = { + scope:actor = { has_trait = reaver } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = reaver + trait:reaver = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = reaver + localization = trait_reaver + } + send_option = { + is_shown = { + scope:actor = { has_trait = reckless } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = reckless + trait:reckless = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = reckless + localization = trait_reckless + } + send_option = { + is_shown = { + scope:actor = { has_trait = holy_warrior } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = holy_warrior + trait:holy_warrior = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = holy_warrior + localization = trait_holy_warrior + } + send_option = { + is_shown = { + scope:actor = { has_trait = open_terrain_expert } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = open_terrain_expert + trait:open_terrain_expert = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = open_terrain_expert + localization = trait_open_terrain_expert + } + send_option = { + is_shown = { + scope:actor = { has_trait = rough_terrain_expert } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = rough_terrain_expert + trait:rough_terrain_expert = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = rough_terrain_expert + localization = trait_rough_terrain_expert + } + send_option = { + is_shown = { + scope:actor = { has_trait = forest_fighter } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = forest_fighter + trait:forest_fighter = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = forest_fighter + localization = trait_forest_fighter + } + send_option = { + is_shown = { + scope:actor = { has_trait = cautious_leader } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = cautious_leader + trait:cautious_leader = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = cautious_leader + localization = trait_cautious_leader + } + send_option = { + is_shown = { + scope:actor = { has_trait = organizer } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = organizer + trait:organizer = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = organizer + localization = trait_organizer + } + send_option = { + is_shown = { + scope:actor = { has_trait = winter_soldier } + } + is_valid = { + scope:recipient = { + NOR = { + has_trait = winter_soldier + trait:winter_soldier = { + any_opposite_trait = { + scope:recipient = { has_trait = prev } + } + } + } + } + } + flag = winter_soldier + localization = trait_winter_soldier + } + + send_options_exclusive = yes + + on_send = { + switch = {#save which trait was chosen as scope:target_trait + trigger = yes + scope:logistician = { + trait:logistician = { save_scope_as = target_trait } + } + scope:military_engineer = { + trait:military_engineer = { save_scope_as = target_trait } + } + scope:aggressive_attacker = { + trait:aggressive_attacker = { save_scope_as = target_trait } + } + scope:unyielding_defender = { + trait:unyielding_defender = { save_scope_as = target_trait } + } + scope:forder = { + trait:forder = { save_scope_as = target_trait } + } + scope:flexible_leader = { + trait:flexible_leader = { save_scope_as = target_trait } + } + scope:desert_warrior = { + trait:desert_warrior = { save_scope_as = target_trait } + } + scope:jungle_stalker = { + trait:jungle_stalker = { save_scope_as = target_trait } + } + scope:reaver = { + trait:reaver = { save_scope_as = target_trait } + } + scope:reckless = { + trait:reckless = { save_scope_as = target_trait } + } + scope:holy_warrior = { + trait:holy_warrior = { save_scope_as = target_trait } + } + scope:open_terrain_expert = { + trait:open_terrain_expert = { save_scope_as = target_trait } + } + scope:rough_terrain_expert = { + trait:rough_terrain_expert = { save_scope_as = target_trait } + } + scope:forest_fighter = { + trait:forest_fighter = { save_scope_as = target_trait } + } + scope:cautious_leader = { + trait:cautious_leader = { save_scope_as = target_trait } + } + scope:organizer = { + trait:organizer = { save_scope_as = target_trait } + } + scope:winter_soldier = { + trait:winter_soldier = { save_scope_as = target_trait } + } + fallback = { + scope:actor = { + random_character_trait = { + limit = { has_trait_category = commander } + save_scope_as = target_trait + } + } + } + } + } + + on_accept = { + scope:actor = { + # Trait you're trying to make your ward gained is saved as scope:target_trait + trigger_event = mpo_interactions_events.0101 + show_as_tooltip = { + add_stress = minor_stress_gain + add_opinion = { + target = scope:recipient + modifier = pleased_opinion + opinion = 20 + } + } + } + scope:recipient = { + show_as_tooltip = { + switch = {#save which trait was chosen as scope:target_trait + trigger = yes + scope:logistician = { + trait:logistician = { save_scope_as = target_trait } + } + scope:military_engineer = { + trait:military_engineer = { save_scope_as = target_trait } + } + scope:aggressive_attacker = { + trait:aggressive_attacker = { save_scope_as = target_trait } + } + scope:unyielding_defender = { + trait:unyielding_defender = { save_scope_as = target_trait } + } + scope:forder = { + trait:forder = { save_scope_as = target_trait } + } + scope:flexible_leader = { + trait:flexible_leader = { save_scope_as = target_trait } + } + scope:desert_warrior = { + trait:desert_warrior = { save_scope_as = target_trait } + } + scope:jungle_stalker = { + trait:jungle_stalker = { save_scope_as = target_trait } + } + scope:reaver = { + trait:reaver = { save_scope_as = target_trait } + } + scope:reckless = { + trait:reckless = { save_scope_as = target_trait } + } + scope:holy_warrior = { + trait:holy_warrior = { save_scope_as = target_trait } + } + scope:open_terrain_expert = { + trait:open_terrain_expert = { save_scope_as = target_trait } + } + scope:rough_terrain_expert = { + trait:rough_terrain_expert = { save_scope_as = target_trait } + } + scope:forest_fighter = { + trait:forest_fighter = { save_scope_as = target_trait } + } + scope:cautious_leader = { + trait:cautious_leader = { save_scope_as = target_trait } + } + scope:organizer = { + trait:organizer = { save_scope_as = target_trait } + } + scope:winter_soldier = { + trait:winter_soldier = { save_scope_as = target_trait } + } + } + if = { + limit = { exists = scope:target_trait } + add_trait = scope:target_trait + } + add_opinion = { + target = scope:actor + modifier = admiration_opinion + opinion = 20 + } + } + } + } + + on_decline = { + scope:actor = { + # Trait you're trying to make your ward gained is saved as scope:target_trait + trigger_event = mpo_interactions_events.0102 + show_as_tooltip = { + add_stress = medium_stress_gain + add_opinion = { + target = scope:recipient + modifier = disappointed_opinion + opinion = -20 + } + } + } + scope:recipient = { + show_as_tooltip = { + add_opinion = { + target = scope:actor + modifier = confused_opinion + opinion = -20 + } + } + } + } + + auto_accept = no + + ai_accept = { + base = 0 # Try to make it 0 for most interactions + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + + modifier = { # Perk boost + desc = influence_children_groomed_to_rule_perk_tt + trigger = { + scope:actor = { has_perk = groomed_to_rule_perk } + } + add = groomed_to_rule_value + } + + modifier = { #more likely if you already have something in common + add = { + value = 5 + if = { + limit = { + number_of_personality_traits_in_common = { + target = scope:recipient + value = 2 + } + } + multiply = 2 + } + else_if = { + limit = { + number_of_personality_traits_in_common = { + target = scope:recipient + value = 3 + } + } + multiply = 3 + } + } + number_of_personality_traits_in_common = { + target = scope:recipient + value >= 1 + } + desc = we_are_alike_tt + } + + modifier = { #less likely if you already have opposite traits + add = { + value = -5 + if = { + limit = { + scope:recipient = { + number_of_opposing_personality_traits = { + target = scope:actor + value = 2 + } + } + } + multiply = 2 + } + else_if = { + limit = { + scope:recipient = { + number_of_opposing_personality_traits = { + target = scope:actor + value = 3 + } + } + } + multiply = 3 + } + } + scope:recipient = { + number_of_opposing_personality_traits = { + target = scope:actor + value >= 1 + } + } + desc = we_are_NOT_alike_tt + } + + modifier = { #adding your knowledge + add = { + value = scope:actor.martial + multiply = 0.5 + } + desc = HAS_MARTIAL_SKILL_REASON + } + + modifier = { #adding your fighting skills + add = { + value = scope:actor.prowess + multiply = 0.5 + } + desc = HAS_PROWESS_SKILL_REASON + } + + modifier = { #more likely with a Wet Nurse employed + exists = scope:actor.court_position:champion_court_position + add = 10 + desc = HAS_CHAMPION_REASON + } + + modifier = { #more likely if chosen trait is compatible with recipients childhood personality + add = 15 + switch = { + trigger = yes + scope:logistician = { + scope:recipient = { + OR = { + has_trait = curious + has_trait = pensive + } + } + } + scope:military_engineer = { + scope:recipient = { + OR = { + has_trait = curious + has_trait = pensive + } + } + } + scope:aggressive_attacker = { + scope:recipient = { + OR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:unyielding_defender = { + scope:recipient = { + OR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:forder = { + scope:recipient = { + OR = { + has_trait = rowdy + has_trait = curious + } + } + } + scope:flexible_leader = { + scope:recipient = { + OR = { + has_trait = charming + has_trait = curious + } + } + } + scope:desert_warrior = { + scope:recipient = { + has_trait = rowdy + } + } + scope:jungle_stalker = { + scope:recipient = { + has_trait = rowdy + } + } + scope:reaver = { + scope:recipient = { + OR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:reckless = { + scope:recipient = { + OR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:holy_warrior = { + scope:recipient = { + has_trait = pensive + } + } + scope:open_terrain_expert = { + scope:recipient = { + has_trait = rowdy + } + } + scope:rough_terrain_expert = { + scope:recipient = { + has_trait = rowdy + } + } + scope:forest_fighter = { + scope:recipient = { + has_trait = rowdy + } + } + scope:cautious_leader = { + scope:recipient = { + has_trait = pensive + } + } + scope:organizer = { + scope:recipient = { + OR = { + has_trait = bossy + has_trait = charming + } + } + } + scope:winter_soldier = { + scope:recipient = { + has_trait = rowdy + } + } + } + desc = has_compatible_personality_tt + } + + modifier = { #less likely if chosen trait is incompatible with recipients childhood personality + add = -15 + switch = { + trigger = yes + scope:logistician = { + scope:recipient = { + NOR = { + has_trait = curious + has_trait = pensive + } + } + } + scope:military_engineer = { + scope:recipient = { + NOR = { + has_trait = curious + has_trait = pensive + } + } + } + scope:aggressive_attacker = { + scope:recipient = { + NOR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:unyielding_defender = { + scope:recipient = { + NOR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:forder = { + scope:recipient = { + NOR = { + has_trait = rowdy + has_trait = curious + } + } + } + scope:flexible_leader = { + scope:recipient = { + NOR = { + has_trait = charming + has_trait = curious + } + } + } + scope:desert_warrior = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + scope:jungle_stalker = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + scope:reaver = { + scope:recipient = { + NOR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:reckless = { + scope:recipient = { + NOR = { + has_trait = bossy + has_trait = rowdy + } + } + } + scope:holy_warrior = { + scope:recipient = { + NOT = { has_trait = pensive } + } + } + scope:open_terrain_expert = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + scope:rough_terrain_expert = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + scope:forest_fighter = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + scope:cautious_leader = { + scope:recipient = { + NOT = { has_trait = pensive } + } + } + scope:organizer = { + scope:recipient = { + NOR = { + has_trait = bossy + has_trait = charming + } + } + } + scope:winter_soldier = { + scope:recipient = { + NOT = { has_trait = rowdy } + } + } + } + desc = has_incompatible_personality_tt + } + + modifier = { #more likely if actor is afraid of you + add = intimidated_halved_reason_value + scope:recipient = { + target_is_liege_or_above = scope:actor + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { #more likely if actor is afraid of you + add = cowed_halved_reason_value + scope:recipient = { + target_is_liege_or_above = scope:actor + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + modifier = { #less likely if recipient already has a commander trait + add = -50 + scope:recipient = { + number_of_commander_traits >= 1 + } + desc = has_commander_traits_already + } + } + + # AI + ai_potential = { + any_relation = { + type = ward + count >= 1 + } + } + ai_frequency = 12 + ai_targets = { + ai_recipients = courtiers + } + ai_will_do = { + base = -100 + modifier = { # If the recipient is a player, do not bother sending + factor = 0 + scope:recipient = { + is_ai = no + } + } + modifier = { + add = ai_honor + } + modifier = { + add = ai_energy + } + modifier = { + add = ai_sociability + } + modifier = { + add = ai_boldness + } + } +} + +mpo_make_blood_brother = { + category = interaction_category_diplomacy + icon = blood_brother + desc = make_blood_brother_desc + common_interaction = yes + can_send_despite_rejection = yes + interface_priority = 60 + + greeting = positive + notification_text = MAKE_BLOOD_BROTHER_NOTIFICATION + popup_on_receive = yes + ai_maybe = yes + + cooldown = { months = 1 } + cooldown_against_recipient = { years = 5 } + + is_shown = { + # Scope:actor needs to have a suitable CulTrad. + scope:actor = { + mpo_valid_for_blood_brotherhood_trigger = yes + NOT = { var:had_mpo_temujin_flavor_0020 ?= scope:recipient } + } + scope:recipient = { + mpo_valid_for_blood_brotherhood_trigger = yes + NOT = { + this = scope:actor + } + } + } + + is_valid_showing_failures_only = { + mpo_can_be_blood_brothers_trigger = { CHARACTER_1 = scope:actor CHARACTER_2 = scope:recipient } + # Both characters must be available + scope:actor = { + is_imprisoned = no + is_incapable = no + } + scope:recipient = { + is_imprisoned = no + is_incapable = no + } + } + #Mutual enemy that you oppose together + send_option = { + flag = common_enemy + is_valid = { + custom_description = { + text = blood_brother_common_enemy_trigger + mpo_blood_brother_common_enemy_trigger = yes + } + } + localization = BLOOD_BROTHER_COMMON_ENEMY + } + #Shared memories + send_option = { + flag = memories_together + is_valid = { + custom_description = { + text = blood_brother_memory_trigger + scope:actor = { + any_memory = { + has_memory_participant = scope:recipient + mpo_blood_brother_reason_memory_trigger = yes + } + } + } + } + localization = BLOOD_BROTHER_MEMORIES + } + + #Fought together in a war + send_option = { + flag = war_allies + is_valid = { + custom_description = { + text = blood_brother_former_war_allies_trigger + scope:actor = { + has_variable_list = former_war_allies + any_in_list = { + variable = former_war_allies + this = scope:recipient + } + } + } + } + localization = BLOOD_BROTHER_WAR_ALLIES + } + + # Normal + send_option = { + is_shown = { + always = no + } + is_valid = { + always = yes + } + flag = normal + localization = BLOOD_BROTHER_NORMAL + starts_enabled = { always = yes } + } + + cost = { + piety = minor_piety_value + } + + send_options_exclusive = no + + on_accept = { + # Notifications with most effects. + scope:actor = { + # Become blood brothers + #Tooltip effect because it happens later/in the blood brother on action + show_as_tooltip = { + set_relation_blood_brother = scope:recipient + } + custom_tooltip = blood_brother_alliance_actor_alliance_tt + custom_tooltip = blood_brother_actor_gains_hook_tt + if = { + limit = { + scope:recipient = { + mpo_blood_brother_august_trigger = { OTHER_BROTHER = scope:actor } + } + } + if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + } + } + custom_tooltip = blood_brother_august_nomadic_modifier_tt + } + else = { + custom_tooltip = blood_brother_august_modifier_tt + } + } + if = { + limit = { + scope:recipient = { + mpo_blood_brother_warrior_trigger = { OTHER_BROTHER = scope:actor } + } + } + custom_tooltip = blood_brother_warrior_modifier_tt + } + if = { + limit = { + scope:recipient = { + mpo_blood_brother_clever_trigger = yes + } + } + if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + } + } + custom_tooltip = blood_brother_clever_nomadic_modifier_tt + } + else = { + custom_tooltip = blood_brother_clever_modifier_tt + } + } + if = { + limit = { + scope:recipient = { + mpo_blood_brother_loving_trigger = yes + } + } + custom_tooltip = blood_brother_loving_modifier_tt + } + if = { + limit = { + always = scope:common_enemy + } + custom_tooltip = blood_brother_foe_modifier_tt + } + } + scope:recipient = { + # Become blood brothers + #Tooltip effect because it happens later/in the blood brother on action + + show_as_tooltip = { set_relation_blood_brother = scope:actor } + custom_tooltip = blood_brother_alliance_recipient_alliance_tt + custom_tooltip = blood_brother_recipient_gains_hook_tt + if = { + limit = { + scope:actor = { + mpo_blood_brother_august_trigger = { OTHER_BROTHER = scope:recipient } + } + } + if = { + limit = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + custom_tooltip = blood_brother_august_nomadic_modifier_tt + } + else = { + custom_tooltip = blood_brother_august_modifier_tt + } + } + if = { + limit = { + scope:actor = { + mpo_blood_brother_warrior_trigger = { OTHER_BROTHER = scope:recipient } + } + } + custom_tooltip = blood_brother_warrior_modifier_tt + } + if = { + limit = { + scope:actor = { + mpo_blood_brother_clever_trigger = yes + } + } + if = { + limit = { + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + custom_tooltip = blood_brother_clever_nomadic_modifier_tt + } + else = { + custom_tooltip = blood_brother_clever_modifier_tt + } + } + if = { + limit = { + scope:actor = { + mpo_blood_brother_loving_trigger = yes + } + } + custom_tooltip = blood_brother_loving_modifier_tt + } + if = { + limit = { + always = scope:common_enemy + } + custom_tooltip = blood_brother_foe_modifier_tt + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_gain + DESC = clan_unity_oath_of_true_friendship.desc + REVERSE_NON_HOUSE_TARGET = no + } + if = { + limit = { + always = scope:common_enemy + } + scope:actor = { + make_blood_brother_save_common_enemy_effect = yes + } + } + #Fire events for each char, resetting scopes to be appropriate in each + hidden_effect = { + scope:recipient = { + save_scope_as = blood_bro + } + scope:actor = { + set_relation_blood_brother = { + reason = sworn_blood_brother + target = scope:recipient + } + trigger_event = mpo_interactions_events.0006 + } + clear_saved_scope = blood_bro + scope:actor = { + save_scope_as = blood_bro + } + scope:recipient = { + trigger_event = mpo_interactions_events.0006 + } + } + } + + on_decline = { + # Scope:actor gains some stress over the whole ordeal. + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = make_blood_brother_interaction.decline.actor.tt + left_icon = scope:recipient + add_stress = minor_stress_gain + } + } + # Scope:actor loses opinion of scope:recipient. + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = make_blood_brother_interaction.decline.recipient.tt + left_icon = scope:actor + scope:actor = { + add_opinion = { + target = scope:recipient + modifier = hurt_opinion + opinion = -20 + } + } + } + } + # And set up a little hidden drama for later... + hidden_effect = { + scope:recipient = { + if = { + limit = { + # We don't use the standard check for this, since they'll already be friends by definition, so the trigger would always return as false. + # Instead, we just check to make sure they're not *already* potential rivals; this can happen regardless, so really we're just setting them up for drama if the friendship ever falters. + NOT = { has_relation_potential_rival = scope:actor } + } + random = { + chance = 20 + set_relation_potential_rival = scope:actor + } + } + } + } + + # If we're a clan this interaction affects unity + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = minor_unity_loss + DESC = clan_unity_declined_true_friendship.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + + # AI + ## Standard Acceptance stuff + ai_accept = { + base = -50 + + mpo_blood_brother_interactions_ai_accept_modifier = yes + + # Common foe send option + # Are you offering confederation leadership? + modifier = { + trigger = { + scope:common_enemy ?= yes + } + add = 75 + desc = BLOOD_BROTHER_COMMON_ENEMY_VALUE + } + # Memories send option + modifier = { + trigger = { + scope:memories_together ?= yes + } + add = 50 + desc = BLOOD_BROTHER_MEMORIES_VALUE + } + # Former war allies send option + modifier = { + trigger = { + scope:war_allies ?= yes + } + add = 30 + desc = BLOOD_BROTHER_WAR_ALLIES_VALUE + } + } + ## Performance-enhancement + ai_potential = { + is_imprisoned = no + is_at_war = no + has_blood_brother = no + } + ai_target_quick_trigger = { adult = yes } + ai_targets = { ai_recipients = liege } + ai_targets = { ai_recipients = scripted_relations } + ai_targets = { + ai_recipients = peer_vassals + max = 25 + } + ai_targets = { + ai_recipients = neighboring_rulers_including_tributary_borders + max = 25 + } + ## Frequency + ai_frequency = 48 + ai_will_do = { + base = -50 + + #Dishonorable characters don't want to be bound like this + modifier = { + scope:recipient = { + ai_honor <= medium_negative_ai_value + } + add = -40 + } + modifier = { + scope:recipient = { + ai_sociability <= medium_negative_ai_value + } + add = -20 + } + + #This will mostly just annoy players, unless AI is worthy and has a good reason + modifier = { + scope:recipient = { + is_ai = no + } + NOT = { + scope:actor = { + is_landed = yes + OR = { + has_relation_friend = scope:recipient + has_relation_soulmate = scope:recipient + is_allied_to = scope:recipient + } + } + } + add = -100 + } + modifier = { + add = 25 + any_ally = { + count < 1 + } + } + modifier = { + add = 75 + any_ally = { + count < 2 + } + scope:recipient = { # Don't propose alliances to tiny insignificant rulers just because + OR = { + current_military_strength >= scope:actor.eighty_percent_of_current_military_strength + primary_title.tier >= scope:actor.primary_title.tier + AND = { + primary_title.tier >= tier_duchy + scope:actor.primary_title.tier < tier_empire + } + } + } + } + + modifier = { + add = 25 + scope:actor = { + mpo_blood_brother_common_enemy_trigger = yes + } + } + modifier = { + add = 25 + scope:actor = { + scope:actor = { + any_memory = { + has_memory_participant = scope:recipient + mpo_blood_brother_reason_memory_trigger = yes + } + } + } + } + modifier = { + add = 10 + scope:actor = { + has_variable_list = former_war_allies + any_in_list = { + variable = former_war_allies + this = scope:recipient + } + } + } + + mpo_blood_brother_interactions_ai_accept_modifier = yes + + modifier = { # The AI shouldn't propose to their Lieges + factor = 0.5 + is_liege_or_above_of = scope:recipient + } + modifier = { # The AI shouldn't propose to their Vassals unless Clan + factor = 0.5 + scope:actor = { + NOT = { government_has_flag = government_is_clan } + } + scope:recipient = { + is_vassal_of = scope:actor + } + } + modifier = { + factor = 0 + scope:recipient = { + has_character_modifier = broke_blood_brotherhood_modifier + } + } + + # Jamukha offers Temujin via Event + modifier = { + trigger = { + scope:actor = { this = character:mpo_mongol_1 } + scope:recipient = { this = character:125501 } + } + factor = 0 + } + } +} + +mpo_retrieve_land_from_herder_interaction = { + category = interaction_category_diplomacy + common_interaction = yes + notification_text = REVOKE_TITLE_PROPOSAL + interface_priority = 100 + icon = mpo_retrieve_land_from_herder_interaction + desc = mpo_retrieve_land_from_herder_interaction_desc + + special_interaction = revoke_title_interaction + interface = revoke_title + target_type = title + target_filter = recipient_domain_titles + ai_maybe = yes + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 60 + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + # actor character giving the titles + # recipient character receiving the titles + + is_shown = { + scope:recipient = { + government_has_flag = government_is_herder + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + is_imprisoned = no + prestige >= minor_prestige_value + custom_tooltip = { + text = mpo_retrieve_land_from_herder_interaction_neighbour_tt + any_sub_realm_county = { + any_neighboring_county = { + holder = { + this = scope:recipient + } + } + } + } + } + scope:recipient = { + custom_tooltip = { + text = mpo_retrieve_land_from_herder_independent_tt + OR = { + AND = { + is_independent_ruler = yes + is_tributary = no + } + is_tributary_of_suzerain_or_above = scope:actor + is_vassal_of = scope:actor + } + } + custom_tooltip = { + text = mpo_retrieve_land_migration_tt + capital_county = { is_migration_target = no } + } + } + } + + can_be_picked_title = { + scope:target = { + title_revocation_standard_can_pick_title_trigger = yes + } + } + + has_valid_target = { + scope:target = { + is_landless_type_title = no + NOT = { is_noble_family_title = yes } + NOT = { is_nomad_title = yes } + } + } + + #Use hook -- Has to stay so the UI doesn't break + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + on_auto_accept = { + scope:recipient = { + trigger_event = char_interaction.0200 + } + } + + on_accept = { + scope:recipient = { + if = { + limit = { + is_tributary = yes + NOT = { + is_tributary_of = scope:actor + } + } + suzerain = { + add_opinion = { + target = scope:actor + modifier = upset_opinion + opinion = -25 + } + } + } + } + save_scope_value_as = { + name = revoke_title_interaction + value = yes + } + scope:recipient = { + capital_county = { + change_county_control = -25 + } + } + scope:actor = { + add_prestige = minor_prestige_loss + trigger_event = char_interaction.0199 + } + revoke_title_interaction_effect = yes + + if = { + limit = { + scope:actor = { has_character_flag = flag_hostile_actions_disabled_delay } + } + scope:actor = { remove_character_flag = flag_hostile_actions_disabled_delay } + } + } + + auto_accept = yes + + # AI + ai_targets = { + ai_recipients = tributaries + } + ai_targets = { + ai_recipients = neighboring_rulers + max = 5 + } + ai_frequency = 4 + + ai_potential = { + domain_size < domain_limit + primary_title.tier >= tier_county + } + + ai_will_do = { + base = 0 + modifier = { + scope:actor = { + government_has_flag = government_is_nomadic + current_domain_fertility <= bad_county_fertility_level + } + add = 100 + } + modifier = { + scope:actor = { + NOT = { government_has_flag = government_is_nomadic } + short_term_gold >= massive_gold_value + NOR = { + has_trait = humble + has_trait = content + } + } + add = 25 + } + } +} + +mpo_vassal_to_tributary_interaction = { + category = interaction_category_vassal + icon = become_tributary_interaction + common_interaction = yes + + desc = mpo_vassal_to_tributary_interaction_desc + + ai_frequency = 8 + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:actor = { + is_ai = no + is_vassal_of = scope:recipient + government_has_flag = government_is_nomadic + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + is_imprisoned = no + } + scope:actor = { + is_imprisoned = no + NOR = { + is_at_war_with = scope:recipient + exists = involved_activity + is_travelling = yes + } + } + } + + is_highlighted = { + always = yes + } + + # Start with higher taxes + send_option = { + flag = high_obligations + localization = VASSAL_TO_TRIBUTARY_HIGHER_OBLIGATIONS + } + + #Use hook + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + on_accept = { + scope:actor = { + show_as_tooltip = { + break_subject_contract_and_establish_tributary_effect = { SUZERAIN = scope:recipient TRIBUTARY = scope:actor } + } + } + scope:actor = { + trigger_event = mpo_interactions_events.0010 + } + } + + on_decline = { + scope:actor = { + #Letter response, they get a bit pissed + trigger_event = mpo_interactions_events.0011 + } + } + + ai_accept = { + base = 0 + + modifier = { + add = -50 + desc = BASE_RELUCTANCE + } + + # Do they like you? + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + desc = AI_OPINION_REASON + } + + # If you're friends + modifier = { + add = 50 + scope:recipient = { + has_relation_friend = scope:actor + } + desc = AI_FRIEND_REASON + } + + # If you're lovers + modifier = { + add = 50 + scope:recipient = { + has_relation_lover = scope:actor + } + desc = AI_YOUR_LOVER + } + + # You're using a hook + modifier = { + add = 100 + desc = SCHEME_WEAK_HOOK_USED + scope:hook = yes + } + + # You promised higher taxes + modifier = { + add = 25 + desc = AI_HIGHER_OBLIGATIONS_REASON + scope:high_obligations = yes + } + + # Are they Nomadic + modifier = { + add = 25 + desc = game_concept_nomadic_government + scope:recipient = { government_has_flag = government_is_nomadic } + } + } + + ai_will_do = { + base = 0 + } + + ai_targets = { + ai_recipients = suzerain + } +} + +mpo_gift_herd_interaction = { + icon = herd_interaction + category = interaction_category_friendly + common_interaction = yes + interface_priority = 65 + desc = mpo_gift_herd_interaction_desc + + greeting = positive + notification_text = SEND_GIFT_HERD_PROPOSAL + + answer_accept_key = SEND_GIFT_HERD_ACCEPT + answer_reject_key = SEND_GIFT_HERD_REJECT + + ai_targets = { + ai_recipients = scripted_relations + ai_recipients = liege + ai_recipients = suzerain + ai_recipients = head_of_faith + } + ai_targets = { + ai_recipients = neighboring_rulers + ai_recipients = peer_vassals + max = 10 + } + ai_targets = { + ai_recipients = vassals + max = 10 + } + ai_targets = { + ai_recipients = tributaries + max = 10 + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency = 60 + + is_shown = { + NOT = { + scope:recipient = scope:actor + } + scope:actor = { government_has_flag = government_is_nomadic } + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + + is_valid_showing_failures_only = { + NOT = { scope:actor.domicile.herd < herd_gift_value } + scope:recipient = { is_busy_in_events_localised = yes } + } + + on_auto_accept = { + scope:recipient = { + trigger_event = mpo_interactions_events.0020 + } + } + + on_accept = { + scope:recipient = { + # Verify that they could become friend + if = { + limit = { + NAND = { + has_relation_friend = scope:actor + has_relation_lover = scope:actor + has_relation_soulmate = scope:actor + has_relation_best_friend = scope:actor + } + } + gifting_leads_towards_friendship_effect = yes + } + } + + scope:actor = { + # Warning for multiple gifts + if = { + limit = { + scope:recipient = { + has_opinion_modifier = { + target = scope:actor + modifier = sent_herd_opinion + } + } + } + custom_tooltip = ALREADY_SENT_GIFT_HERD_WARNING + } + + send_interface_message = { + type = event_gold_neutral + title = gift_interaction_notification + right_icon = scope:recipient + pay_herd = { + target = scope:recipient + value = domicile.herd_gift_value + } + stress_impact = { + greedy = medium_stress_impact_gain + } + if = { + limit = { + scope:recipient = { + NOT = { + is_heir_of = scope:actor + } + } + } + stress_impact = { + generous = medium_stress_impact_loss + } + } + + #FP3 Tenet Communal Possessions Perk - piety gain for gift giving. + if = { + limit = { + scope:actor = { + faith = { + has_doctrine_parameter = piety_from_gifts_active + } + } + } + scope:actor = { + add_piety = minor_piety_gain + } + } + + # Let's apply the opinion modifier last, as to apply everything else correctly first + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = sent_herd_opinion + opinion = sent_herd_opinion_value + } + } + } + } + } + + ai_accept = { + base = 0 + modifier = { + add = 100 + desc = HERD_REASON + } + } + + ai_potential = { + is_available_at_peace_ai_adult = yes + ai_greed < medium_positive_ai_value + domicile.herd >= { + value = major_herd_value_static + multiply = 3 + } + ai_has_conqueror_personality = no + ai_should_focus_on_building_in_their_capital = no + } + + auto_accept = { + custom_description = { + text = auto_accept_interaction_ai + object = scope:recipient + scope:recipient = { + is_ai = yes + } + } + } + + ai_min_reply_days = 1 + ai_max_reply_days = 1 + + ai_will_do = { + base = 100 + + modifier = { # Do not send double-gifts + factor = 0 + scope:recipient = { + has_opinion_modifier = { + target = scope:actor + modifier = sent_herd_opinion + } + } + } + + modifier = { # Special Blood Brother weight + add = 100 + scope:actor = { + has_relation_blood_brother = scope:recipient + domicile.herd >= { # Do not lose all your Herd for this + value = herd_gift_value + multiply = 2 + } + } + } + + modifier = { + add = 100 + scope:recipient = { + is_tributary_of = scope:actor + OR = { + ai_greed <= -50 + is_obedient_to = scope:actor + opinion = { + target = scope:actor + value >= 50 + } + } + } + } + + modifier = { # Basic Filtering + factor = 0 + scope:recipient = { + NOR = { + AND = { # Bankrupt lovers, friends and a bankrupt liege should be considered + OR = { + scope:actor = { + any_liege_or_above = { + this = scope:recipient + } + } + has_secret_relation_lover = scope:actor + has_relation_lover = scope:actor + has_relation_soulmate = scope:actor + has_relation_friend = scope:actor + has_relation_best_friend = scope:actor + } + domicile.herd < minor_herd_value_static + } + AND = { # Generous characters will give gifts to their friends/lovers + OR = { + has_secret_relation_lover = scope:actor + has_relation_lover = scope:actor + has_relation_soulmate = scope:actor + has_relation_friend = scope:actor + has_relation_best_friend = scope:actor + } + scope:actor = { + OR = { + ai_greed <= high_negative_ai_value + AND = { + ai_greed < 0 + culture = { + has_cultural_parameter = gives_more_gifts + } + } + } + } + } + AND = { # Characters with the Generous Cultural Tradition will give gifts to more people + is_ruler = yes + OR = { + is_allied_to = scope:actor + is_close_or_extended_family_of = scope:actor + } + scope:actor = { + ai_greed < 0 + culture = { + has_cultural_parameter = gives_more_gifts + } + } + } + AND = { # Characters with the loyal trait more likely to give gifts to friends/lieges + OR = { + scope:actor.liege ?= this + has_relation_friend = scope:actor + has_relation_best_friend = scope:actor + is_allied_to = scope:actor + is_close_or_extended_family_of = scope:actor + } + scope:actor = { + ai_greed <= 0 + has_trait = loyal + } + } + AND = { # Powerful vassals should be considered + is_powerful_vassal_of = scope:actor + opinion = { + target = scope:actor + value < 0 + } + NOT ={ + has_opinion_modifier = { + target = scope:actor + modifier = sent_herd_opinion + } + } + } + AND = { # Factioneering vassals should be considered + is_vassal_of = scope:actor + is_a_faction_member = yes + NOT ={ + has_opinion_modifier = { + target = scope:actor + modifier = sent_herd_opinion + } + } + } + AND = { # Realm Priests should be considered + scope:actor = { + faith = { has_doctrine = doctrine_theocracy_temporal } + exists = cp:councillor_court_chaplain + cp:councillor_court_chaplain = scope:recipient + } + opinion = { + target = scope:actor + value <= 25 + } + NOT = { + has_opinion_modifier = { + target = scope:actor + modifier = sent_herd_opinion + } + } + } + } + } + } + + modifier = { + factor = 0.1 + scope:recipient = { + opinion = { + target = scope:actor + value < 0 + } + NAND = { + is_vassal_of = scope:actor + scope:actor = { + ai_rationality > 50 + } + } + } + } + + modifier = { + factor = 0.1 + scope:recipient = { + has_relation_rival = scope:actor + } + } + } +} + +mpo_offer_submission_or_ruin = { + category = interaction_category_vassal + icon = invasion + popup_on_receive = yes + pause_on_receive = yes + ai_maybe = yes + + desc = mpo_offer_submission_or_ruin_desc + + ai_targets = { + ai_recipients = neighboring_rulers + } + ai_frequency = 3 + interface_priority = 300 + common_interaction = yes + force_notification = yes + + is_shown = { + scope:actor = { + mpo_offer_submission_or_ruin_shown_actor_trigger = yes + } + scope:recipient = { + mpo_offer_submission_or_ruin_shown_recipient_trigger = yes + } + + } + + is_valid_showing_failures_only = { + scope:actor = { + mpo_offer_submission_or_ruin_valid_actor_trigger = yes + } + scope:recipient = { + mpo_offer_submission_or_ruin_valid_recipient_trigger = yes + } + } + + is_highlighted = { + always = yes + } + + greeting = positive + notification_text = OFFER_SUBMISSION_OR_RUIN_INTERACTION_NOTIFICATION + + can_send_despite_rejection = yes + + ai_min_reply_days = 3 + ai_max_reply_days = 5 + + ai_accept = { + base = -50 + # MAIN + # Heretic/Infidel modifier. + # Tier difference modifier. + # Dejure modifier. + # Distant/Remote Realm modifier. + # Military power difference modifier. + + # MINOR + # Rivalry modifier. + # Same Dynasty modifier. + # Cultural/Cultural Group modifiers. + # Ageism modifier vs kids. + # Ruler Legitimacy modifier. + # Claimant modifier. + # FP3 Piety Level modifier. + + # OPINION SCALES + # Dread + # Compare Opinion modifier. + + #CONFEDERATION + modifier = { + desc = CONFEDERATION_MEMBER_REASON + scope:recipient = { + is_confederation_member = yes + } + add = -500 + } + + #HERDER + modifier = { + scope:recipient = { government_has_flag = government_is_herder } + add = 10000 + desc = HERDER_REASON + } + + #TRIBUTARY + modifier = { + desc = KING_SUZERAIN_REASON + scope:recipient = { + is_tributary = yes + NOT = { + is_tributary_of_suzerain_or_above = scope:actor + } + suzerain = { + highest_held_title_tier >= tier_kingdom + } + } + add = -50 + } + modifier = { + desc = STRONG_SUZERAIN_REASON + scope:recipient = { + is_tributary = yes + NOT = { + is_tributary_of_suzerain_or_above = scope:actor + } + suzerain = { + sub_realm_size >= 20 + } + } + add = -100 + } + modifier = { + desc = STRONG_SUZERAIN_REASON + scope:recipient = { + is_tributary = yes + NOT = { + is_tributary_of_suzerain_or_above = scope:actor + } + scope:recipient.suzerain = { + current_military_strength >= scope:actor.current_military_strength + } + } + add = -300 + } + modifier = { + desc = ALREADY_TRIBUTARY_REASON + scope:recipient = { + is_tributary_of_suzerain_or_above = scope:actor + } + add = 30 + } + + # PERKS + modifier = { # Perk boost + desc = offer_vassalization_true_ruler_perk_tt + trigger = { + scope:actor = { has_perk = true_ruler_perk } + } + add = 30 + } + modifier = { # Education 5 boost + desc = offer_vassalization_education_diplomacy_5_tt + trigger = { + scope:actor = { has_trait_with_flag = offer_vassalisation_25 } + } + add = 25 + } + + # EVENTS - temporary bonuses gained by events + modifier = { + desc = event_bonus_to_vassal_accept_tt + trigger = { + scope:actor = { has_character_modifier = event_bonus_to_vassal_accept } + } + add = 20 + } + + + # STRUGGLES - bonus gained by successful Sway scheme during the Persian Struggle + modifier = { + desc = fp3_persian_struggle_previously_swayed_tt + trigger = { + scope:recipient = { + has_opinion_modifier = { + modifier = scheme_sway_and_compelled_to_submit_opinion + target = scope:actor + } + } + } + add = 20 + } + + modifier = { + desc = fp3_rekindler_of_iran_modifier_reason + trigger = { + AND = { + scope:actor = { dynasty ?={ has_dynasty_modifier = fp3_rekindler_of_iran_modifier } } + scope:recipient = { culture = { has_cultural_pillar = heritage_iranian } } + } + } + add = 20 + } + + # OBEDIENCE + modifier = { + desc = obedient_interaction_reason + trigger = { + is_obedient_to = scope:actor + } + add = 100 + } + + modifier = { # Cultural Acceptance + add = offer_vassalage_acceptance_value + desc = cultural_acceptance_interaction_reason + trigger = { + scope:actor = { + NOR = { + has_same_culture_as = scope:recipient + government_has_flag = government_is_nomadic # Nomads do not care about Culture + has_trait = nomadic_philosophy + } + culture = { + cultural_acceptance = { target = scope:recipient.culture value <= 90 } + } + } + } + } + + # MAIN + modifier = { #Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } + scope:recipient = { + NOR = { #Of two different faiths AND the potential vassal's faith is not pluralistic. + faith = scope:actor.faith + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + } + add = { + value = -40 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -40 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -40 + } + } + } + + modifier = { #Different faith, pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } + scope:recipient = { + NOT = { + faith = scope:actor.faith + } + NOT = { + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -20 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -20 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -20 + } + } + } + + modifier = { #Different faith, both have pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:actor = { + NOR = { # Nomads do not care about Faith + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } + } + scope:recipient = { + NOT = { + faith = scope:actor.faith + } + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -10 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -10 + } + } + } + modifier = { #I am a King! + desc = offer_vassalization_interaction_aibehavior_amkingtier_tt + trigger = { + scope:recipient = { highest_held_title_tier = tier_kingdom } + } + add = { + value = -50 + if = { + limit = { + scope:recipient = { + OR = { + government_has_flag = government_is_special_republic + government_has_flag = government_is_theocracy + } + } + } + add = -50 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 5 + } + add = -50 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 10 + } + add = -100 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 20 + } + add = -100 + } + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add = -10000 + } + } + } + modifier = { #I am an Emperor!!! + desc = offer_vassalization_interaction_aibehavior_amkingtier_tt + trigger = { + scope:recipient = { highest_held_title_tier >= tier_empire } + } + add = { + value = -200 + if = { + limit = { + scope:recipient = { + OR = { + government_has_flag = government_is_special_republic + government_has_flag = government_is_theocracy + } + } + } + add = -100 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 10 + } + add = -100 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 20 + } + add = -200 + } + if = { + limit = { + scope:recipient.sub_realm_size >= 40 + } + add = -200 + } + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add = -10000 + } + } + } + modifier = { #I fought an independence war against you. + desc = offer_vassalization_interaction_aibehavior_independence_war_tt + trigger = { + scope:recipient = { + exists = var:independence_war_former_liege + var:independence_war_former_liege = scope:actor + } + } + add = -300 + } + modifier = { # We are both nomadic + desc = interaction_nonnomad_vs_nomad + trigger = { + scope:actor = { + government_has_flag = government_is_nomadic + } + scope:recipient = { + government_has_flag = government_is_nomadic + } + } + add = 25 + } + modifier = { # Isolationist tradition + desc = isolationist_reason + trigger = { + NOT = { + scope:actor.culture = scope:recipient.culture + } + scope:recipient.culture = { + has_cultural_tradition = tradition_isolationist + } + } + add = -25 + } + modifier = { #Bankrupt + desc = bankrupt_reason + trigger = { + scope:actor.gold <= -1 + } + add = -100 + } + modifier = { #Wide difference in rank + desc = offer_vassalization_interaction_aibehavior_widetitletier_tt + trigger = { + scope:actor = { + tier_difference = { + target = scope:recipient + value > 2 + } + } + } + add = 40 + } + modifier = { # Allied + desc = offer_vassalization_interaction_aibehavior_allied_tt + trigger = { + scope:recipient = { + is_allied_to = scope:actor + } + } + add = 25 + } + modifier = { # Is the Rightful Liege of recipient + desc = offer_vassalization_interaction_aibehavior_rightfulliegetitleholder_tt + trigger = { + scope:actor = { is_rightful_liege_of = scope:recipient } + } + add = 50 + } + modifier = { # Encircled + desc = offer_vassalization_interaction_aibehavior_encircled_tt + trigger = { + scope:recipient = { + NOT = { + any_neighboring_top_liege_realm_owner = { + NOT = { + this = scope:actor + } + } + } + NOT = { + any_realm_county = { + is_coastal_county = yes + } + } + } + } + add = 50 + } + modifier = { #Distant Realm — Overseas Connection + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:actor = { + character_is_realm_neighbor = scope:recipient + NOT = { #Ibiza should want to be a vassal of Mallorca, etc. + character_is_land_realm_neighbor = scope:recipient + scope:actor = { is_rightful_liege_of = scope:recipient } + } + } + } + add = -50 + } + modifier = { #Distant Realm — No Connection + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:actor = { + NOT = { + character_is_realm_neighbor = scope:recipient + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value < 200000 } } + } + add = -100 + } + modifier = { #Remote Realm. + desc = offer_vassalization_interaction_aibehavior_remoterealm_tt + trigger = { + scope:actor = { + NOT = { + character_is_realm_neighbor = scope:recipient + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 200000 } } + } + add = -200 + } + modifier = { + desc = offer_vassalization_interaction_aibehavior_power_tt + add = { + value = 1 + subtract = { + value = scope:recipient.max_military_strength # Intended for recipient to use max, to avoid having vassalizations become too easy for weakened realms + divide = { value = scope:actor.current_military_strength min = 1 } + } + multiply = 100 + ceiling = yes + } + } + modifier = { + desc = offer_vassalization_interaction_aibehavior_vassal_opinion_tt + trigger = { + scope:actor = { + number_of_powerful_vassals >= 1 + } + } + + add = { + value = 0 + scope:actor = { + every_powerful_vassal = { + if = { + limit = { + save_temporary_opinion_value_as = { + name = vassal_opinion + target = scope:actor + } + } + add = scope:vassal_opinion + } + } + + if = { + limit = { + number_of_powerful_vassals > 0 + } + divide = number_of_powerful_vassals + } + else = { + divide = 10 + } + } + + divide = 10 + } + } + + # MINOR + modifier = { #Friend modifier. + desc = offer_vassalization_interaction_aibehavior_friend_tt + trigger = { + scope:recipient = { + has_relation_friend = scope:actor + NOT = { has_relation_best_friend = scope:actor } + } + } + add = 20 + } + modifier = { #Best Friend modifier. + desc = offer_vassalization_interaction_aibehavior_best_friend_tt + trigger = { + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + add = 50 + } + modifier = { #Lover modifier. + desc = interaction_lover + trigger = { + scope:recipient = { + has_relation_lover = scope:actor + NOT = { has_relation_soulmate = scope:actor } + } + } + add = 20 + } + modifier = { #Soulmate modifier. + desc = interaction_soulmate + trigger = { + scope:recipient = { + has_relation_soulmate = scope:actor + } + } + add = 50 + } + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -200 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -2000 + } + modifier = { #Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + trigger = { + scope:recipient = { + dynasty = scope:actor.dynasty + } + } + add = 25 + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + modifier = { # Iberian Struggle, less likely for outsiders to vassalize inside + add = -35 + desc = iberian_struggle_reason_reason + trigger = { + scope:actor = { + NOT = { + any_character_struggle = { is_struggle_type = iberian_struggle } + } + } + scope:recipient = { + any_character_struggle = { is_struggle_type = iberian_struggle } + } + } + } + + modifier = { #Ageism modifier vs kids. + desc = offer_vassalization_interaction_aibehavior_child_tt + trigger = { + scope:actor = { + age < 12 + } + scope:recipient = { + age > 16 + } + } + add = -5 + } + modifier = { #Illegitimacy modifier. + desc = offer_vassalization_interaction_aibehavior_illegitimate_tt + trigger = { + scope:actor = { + OR = { + AND = { + has_trait = bastard + scope:recipient = { + faith = { NOT = { has_doctrine = doctrine_bastardry_none } } + } + } + has_trait = denounced + has_trait = disinherited + } + } + } + add = -10 + } + + modifier = { #Claimant modifier. + desc = offer_vassalization_interaction_aibehavior_claimant_tt + trigger = { + scope:actor.primary_title = { + scope:recipient = { + has_claim_on = prev + } + } + } + add = -50 + } + + modifier = { # Ambitious + desc = TAKE_THE_VOWS_AMBITIOUS + trigger = { + scope:recipient = { + has_trait = ambitious + } + } + add = -30 + } + modifier = { # Brave + desc = INTERACTION_BRAVE + trigger = { + scope:recipient = { + has_trait = brave + } + } + add = -30 + } + modifier = { # wrathful + desc = INTERACTION_WRATHFUL + trigger = { + scope:recipient = { + has_trait = wrathful + } + } + add = -40 + } + modifier = { # vengeful + desc = INTERACTION_VENGEFUL + trigger = { + scope:recipient = { + has_trait = vengeful + } + } + add = -20 + } + modifier = { # peasant leader + desc = INTERACTION_PEASANT_LEADER + trigger = { + scope:recipient = { + has_trait = peasant_leader + } + } + add = -40 + } + modifier = { # populist leader + desc = INTERACTION_POPULIST_LEADER + trigger = { + scope:recipient = { + has_trait = populist_leader + } + } + add = -100 + } + modifier = { #martial leader + desc = INTERACTION_MARTIAL_EDUCATION + trigger = { + scope:recipient = { + OR = { + has_education_martial_trigger = yes + has_martial_lifestyle_trait_trigger = yes + } + } + } + add = -10 + } + modifier = { # Arrogant + desc = INTERACTION_ARROGANT + trigger = { + scope:recipient = { + has_trait = arrogant + } + } + add = -60 + } + + modifier = { # Fickle + desc = INTERACTION_FICKLE + trigger = { + scope:recipient = { + has_trait = fickle + } + } + add = -10 + } + + modifier = { # Stubborn + desc = INTERACTION_STUBBORN + trigger = { + scope:recipient = { + has_trait = stubborn + } + } + add = -180 + } + + modifier = { # Trusting + desc = TAKE_THE_VOWS_TRUSTING + trigger = { + scope:recipient = { + has_trait = trusting + } + } + add = 20 + } + + modifier = { # Humble + desc = INTERACTION_HUMBLE + trigger = { + scope:recipient = { + has_trait = humble + } + } + add = 20 + } + + modifier = { # Content + desc = INTERACTION_CONTENT + trigger = { + scope:recipient = { + has_trait = content + } + } + add = 20 + } + + modifier = { # Craven + desc = INTERACTION_CRAVEN + trigger = { + scope:recipient = { + has_trait = craven + } + } + add = 100 + } + + modifier = { # FP3 modifier. + desc = GENERIC_YOUR_PIETY_LEVEL_MODIFIER + trigger = { scope:actor = { any_character_struggle = { has_struggle_phase_parameter = piety_level_affects_vassalage_acceptance } } } + add = { + value = { + value = scope:actor.piety_level + subtract = low_piety_level + } + multiply = 10 + } + } + + # OPINION INFLUENCE + modifier = { + add = intimidated_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + opinion_modifier = { #Compare Opinion modifier - Clans care more about opinion + trigger = { + scope:actor = { + government_has_flag = government_is_clan + } + scope:recipient = { + government_has_flag = government_is_clan + } + } + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.7 + } + opinion_modifier = { #Compare Opinion modifier. + trigger = { + OR = { + scope:actor = { + NOT = { government_has_flag = government_is_clan } + } + scope:recipient = { + NOT = { government_has_flag = government_is_clan } + } + } + } + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.35 + } + + # DIPLOMATIC COURT GRANDEUR BONUS + modifier = { + trigger = { + scope:actor = { + has_royal_court = yes + has_dlc_feature = royal_court + has_court_type = court_diplomatic + court_grandeur_current_level >= 1 + } + } + add = { + value = scope:actor.court_grandeur_current + if = { + limit = { # Reduce the bonus if you are below your expected level + scope:actor = { + court_grandeur_current_level < court_grandeur_minimum_expected_level + } + } + multiply = 0.15 + } + else = { + multiply = 0.3 + } + } + desc = DIPLOMATIC_COURT_ACCEPTANCE_INCREASE_REASON + } + + # CONTRACT OPTIONS + modifier = { + add = 20 + scope:actor = { + faith = { + has_doctrine = doctrine_pluralism_pluralistic + } + } + scope:recipient = { + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + } + desc = CONTRACT_RELIGIOUS_EXEMPTION_REASON + } + modifier = { + add = 30 + scope:low_obligations = yes + desc = CONTRACT_MERCIFUL_KHAN_REASON + } + modifier = { + add = -10 + scope:send_siege_weapons = yes + desc = CONTRACT_SEND_SIEGE_WEAPONS_REASON + } + modifier = { + add = -50 + scope:recipient = { + NOT = { + government_has_flag = government_is_herder + } + } + scope:send_tribute = yes + desc = CONTRACT_SEND_TRIBUTE_REASON + } + + # INSPECTION BONUSES + modifier = { + desc = "INSPECTION_REASON" + add = 5 + scope:recipient = { + has_variable_list = lesser_inspection_bonus + is_target_in_variable_list = { + name = lesser_inspection_bonus + target = scope:actor + } + } + } + modifier = { + desc = "INSPECTION_REASON" + add = 10 + scope:recipient = { + has_variable_list = inspection_bonus + is_target_in_variable_list = { + name = inspection_bonus + target = scope:actor + } + } + } + modifier = { + desc = "INSPECTION_REASON_REWARD" + add = 10 + scope:recipient = { + has_variable_list = inspection_reward + is_target_in_variable_list = { + name = inspection_reward + target = scope:actor + } + } + } + modifier = { + desc = "INSPECTION_REASON_REWARD_FOCUSED" + add = 10 + scope:actor = { has_character_modifier = inspection_reward_focused_vassal_acceptance } + } + + # LOW LEGITIMACY + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -10 + scope:actor = { + has_legitimacy_flag = reduced_vassalization_acceptance + } + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -20 + scope:actor = { + has_legitimacy_flag = very_reduced_vassalization_acceptance + } + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -50 + scope:actor = { + has_legitimacy_flag = massively_reduced_vassalization_acceptance + } + } + + # HIGH LEGITIMACY + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 25 + scope:actor = { + has_legitimacy_flag = increased_vassalization_acceptance + } + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 50 + scope:actor = { + has_legitimacy_flag = very_increased_vassalization_acceptance + } + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 75 + scope:actor = { + has_legitimacy_flag = extra_increased_vassalization_acceptance + } + } + + # INFLUENCE + modifier = { + add = 25 + scope:influence_send_option = yes + desc = INFLUENCE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + + #HISTORICALLY ADMIN PEOPLES WANT TO BE ADMIN + modifier = { + add = 30 + scope:actor = { + government_has_flag = government_is_administrative + } + scope:recipient = { + culture = { + OR = { + this = culture:greek + any_parent_culture_or_above = { + this = culture:greek + } + this = culture:han + any_parent_culture_or_above = { + this = culture:han + } + } + } + } + + desc = "HISTORICAL_ADMIN_REASON" + } + + modifier = { # AI-only weights, keep the pope from vassalizing too fast + trigger = { + exists = faith:catholic.religious_head + faith:catholic.religious_head = scope:actor + scope:actor = { is_ai = yes } + } + add = -50 + } + + modifier = { + trigger = { + scope:actor = { + has_variable = severed_head_vassalization + var:severed_head_vassalization = { + this = scope:recipient + } + } + } + add = 200 + desc = COWED_BY_SEVERED_HEAD_MODIFIER + } + + modifier = { #You're distracted by another war + desc = IS_AT_WAR_REASON + trigger = { + scope:actor = { + is_at_war = yes + } + } + add = -20 + } + modifier = { #You're distracted by multiple wars + desc = HAS_MULTIPLE_WARS_REASON + trigger = { + scope:actor = { + any_character_war = { + count >= 2 + exists = this + } + } + } + add = { + value = 0 + scope:actor = { + every_character_war = { + add = -15 + } + } + } + } + modifier = { #You have waged terrifying wars of devastation... + desc = WAGED_KHANS_TERROR_WARS_REASON + trigger = { + scope:actor = { + has_variable = gok_terror_war_value + } + } + add = scope:actor.var:gok_terror_war_value + } + modifier = { # Pacing needed for AI genghis + trigger = { + scope:actor = { + is_ai = yes + } + scope:recipient = { + is_ai = yes + ai_boldness >= 0 + } + } + add = -1000 + } + } + + # Low starting obligations + send_option = { + is_shown = { + scope:recipient = { + NOT = { + government_has_flag = government_is_herder + } + } + } + flag = low_obligations + localization = lenient_obligations + } + + #Normal obligations for normies + send_option = { + is_shown = { + scope:recipient = { + OR = { + highest_held_title_tier < tier_duchy + government_has_flag = government_is_herder + } + } + } + starts_enabled = { always = yes } + flag = normal_obligations + localization = gok_normal_obligations + } + #Demand army + send_option = { + is_shown = { + scope:recipient = { + NOT = { + government_has_flag = government_is_herder + } + highest_held_title_tier >= tier_duchy + } + } + flag = send_army + localization = send_army + starts_enabled = { + scope:recipient = { + mpo_gok_auto_cultural_maa_trigger = yes + highest_held_title_tier >= tier_duchy + } + } + } + #Demand siege weapons + send_option = { + is_shown = { + scope:recipient = { + NOR = { + government_has_flag = government_is_herder + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + highest_held_title_tier >= tier_duchy + } + } + flag = send_siege_weapons + localization = send_siege_weapons + starts_enabled = { + scope:recipient = { + mpo_gok_auto_cultural_maa_trigger = no + highest_held_title_tier >= tier_duchy + } + } + } + + #Demand immediate tribute + send_option = { + is_shown = { + scope:recipient = { + NOT = { + government_has_flag = government_is_herder + } + } + } + flag = send_tribute + localization = send_tribute + } + + send_option = { # EP3 Influence + is_shown = { + scope:actor = { + government_has_flag = government_has_influence + } + } + is_valid = { + scope:actor = { influence >= medium_influence_value } + } + flag = influence_send_option + localization = TRADE_INFLUENCE_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = yes + + on_accept = { + scope:actor = { + save_scope_as = gok + } + mpo_gok_offer_submission_effect = yes + + scope:recipient = { + add_character_flag = { + flag = accepted_gok_submission + years = 3 + } + } + + scope:actor = { + #If recipient isn't a big deal, fire a hidden event that just creates a feed notification (to minimize khan clicking) + if = { + limit = { + scope:recipient = { + NOR = { + highest_held_title_tier >= tier_kingdom + sub_realm_size >= 10 + } + } + } + trigger_event = mpo_greatest_of_khans.0020 + } + else = { + trigger_event = mpo_greatest_of_khans.0021 + } + + ## Remove bonus, it's been used + if = { + limit = { has_character_modifier = event_bonus_to_vassal_accept } + remove_character_modifier = event_bonus_to_vassal_accept + } + + if = { # FP3 + limit = { any_character_struggle = { has_struggle_phase_parameter = offer_vassalization_removes_disloyalty } } + scope:recipient = { remove_trait = disloyal } + } + } + } + + on_decline = { + scope:recipient = { + save_scope_as = gok_victim + } + scope:actor = { + show_as_tooltip = { + mpo_gok_offer_submission_refusal_effect = yes + } + + trigger_event = mpo_greatest_of_khans.0022 + } + } + + ai_potential = { + any_owned_story = { + OR = { + story_type = story_greatest_of_khans + story_type = story_mongol_invasion + } + } + is_independent_ruler = yes + #Not defending or losing an attacking war + NOT = { + any_character_war = { + OR = { + AND = { + any_war_attacker = { + this = root + } + attacker_war_score < 0 + } + any_war_defender = { + this = root + } + } + } + } + #Already engaged in three wars + any_character_war = { + count >= 3 + exists = this + } + } + + ai_will_do = { + base = 100 + + # AI prefers to receive higher obligations from their vassals when possible. + modifier = { + factor = 2 + scope:low_obligations = yes + } + + modifier = { + factor = 3 + scope:normal_obligations = yes + } + + modifier = { + factor = 4 + scope:send_army = yes + } + modifier = { + factor = 4 + scope:send_siege_weapons = yes + } + modifier = { + factor = 5 + scope:send_tribute = yes + } + modifier = { + factor = 3 + scope:recipient = { + sub_realm_size < 3 + } + } + + #really want to get of little realms we encircle + modifier = { + factor = 10 + scope:recipient = { + realm_size <= 20 + NOT = { + any_neighboring_top_liege_realm_owner = { + NOT = { + this = scope:actor + } + } + } + } + } + #Would rather just destroy someone they hate or distrust + modifier = { + factor = 0 + OR = { + has_relation_rival = scope:recipient + opinion = { + target = scope:recipient + value <= -90 + } + scope:recipient = { + has_trait = disloyal + } + scope:recipient = { + has_trait = conqueror + } + scope:recipient = { + has_trait = ambitious + } + scope:recipient = { + ai_greed >= medium_positive_ai_value + ai_honor <= medium_negative_ai_value + } + } + } + modifier = { + factor = 0 + scope:recipient = { + current_military_strength > 0 + scope:actor.current_military_strength > 0 + current_military_strength > scope:actor.current_military_strength + } + } + } +} + +### Negotiate Obedience +mpo_negotiate_obedience_interaction = { + category = interaction_category_vassal + icon = demand_obedience + desc = mpo_negotiate_obedience_interaction_desc + interface_priority = 80 + common_interaction = yes + + ai_frequency = 6 + popup_on_receive = yes + pause_on_receive = yes + + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:recipient = { + is_ai = yes + obedience_target ?= scope:actor + is_obedient = no + } + } + + cost = { + prestige = { + value = medium_prestige_value + if = { + limit = { + scope:actor = { has_realm_law = nomadic_authority_2 } + } + multiply = 1.25 + } + else_if = { + limit = { + scope:actor = { has_realm_law = nomadic_authority_3 } + } + multiply = 1.5 + } + else_if = { + limit = { + scope:actor = { has_realm_law = nomadic_authority_4 } + } + multiply = 1.75 + } + else_if = { + limit = { + scope:actor = { has_realm_law = nomadic_authority_5 } + } + multiply = 2 + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_imprisoned = no + NOT = { + is_at_war_with = scope:recipient + } + } + trigger_if = { + limit = { + scope:recipient = { is_landed = yes is_independent_ruler = no } + } + scope:recipient = { is_vassal_or_below_of = scope:actor } + } + trigger_else_if = { + limit = { + scope:recipient = { is_independent_ruler = yes } + } + scope:actor = { + custom_tooltip = { + text = mpo_interaction_not_neighbouring_tt + any_land_neighboring_realm_with_tributaries_owner = { + this = scope:recipient + } + } + } + } + trigger_else = {} + } + + ai_potential = { + government_has_flag = government_is_nomadic + primary_title.tier >= tier_duchy + prestige >= major_prestige_value + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { + is_valid = { + scope:actor = { + gold >= medium_gold_value + } + } + flag = gold + localization = OFFER_GOLD_FOR_BETTER_AI_ACCEPTANCE + } + + send_option = { + is_valid = { + scope:actor.domicile = { + herd >= medium_herd_value + } + } + flag = herd + localization = OFFER_HERD_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = no + + ai_accept = { + base = -95 + modifier = { + trigger = { + scope:hook ?= yes + } + add = 100 + desc = MIGRATION_HOOK_USED + } + modifier = { + trigger = { + scope:gold ?= yes + } + add = 100 + desc = TRADE_GOLD_FOR_BETTER_AI_ACCEPTANCE_TT + } + modifier = { + trigger = { + scope:herd ?= yes + } + add = 100 + desc = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_TT + } + modifier = { + add = 5 + scope:actor = { has_realm_law = nomadic_authority_2 } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 10 + scope:actor = { has_realm_law = nomadic_authority_3 } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 20 + scope:actor = { has_realm_law = nomadic_authority_4 } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = 100 + scope:actor = { has_realm_law = nomadic_authority_5 } + desc = DEMAND_OBEDIENCE_INTERACTION_DOMINANCE_ACCEPTANCE + } + modifier = { + add = -30 + scope:actor = { legitimacy_level = 1 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = -20 + scope:actor = { legitimacy_level = 2 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 5 + scope:actor = { legitimacy_level = 3 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 15 + scope:actor = { legitimacy_level = 4 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = 30 + scope:actor = { legitimacy_level = 5 } + desc = DEMAND_OBEDIENCE_INTERACTION_LEGITIMACY_ACCEPTANCE + } + modifier = { + add = { + value = ai_boldness + multiply = -1 + divide = 2 + } + NOT = { ai_boldness = 0 } + desc = ARTIFACT_BOLDNESS_REASON + } + modifier = { + add = { + value = ai_greed + multiply = -1 + divide = 2 + } + ai_greed > 0 + desc = ARTIFACT_GREED_REASON + } + modifier = { + add = { + value = ai_honor + divide = 4 + } + NOT = { ai_honor = 0 } + desc = ARTIFACT_HONOR_REASON + } + modifier = { + add = -20 + scope:recipient = { + has_trait = brave + } + desc = BLACKMAIL_INTERACTION_BRAVE_ACCEPTANCE + } + modifier = { + add = -50 + scope:recipient = { + has_trait = arrogant + } + desc = BLACKMAIL_INTERACTION_ARROGANT_ACCEPTANCE + } + modifier = { + add = 25 + scope:recipient = { + has_trait = trusting + } + desc = BLACKMAIL_INTERACTION_TRUSTING_ACCEPTANCE + } + modifier = { + add = -50 + scope:recipient = { + has_trait = disloyal + } + desc = DEMAND_OBEDIENCE_INTERACTION_DISLOYAL_ACCEPTANCE + } + modifier = { + add = -500 + scope:recipient = { + exists = domicile + domicile.herd >= 100 + domicile.herd > scope:actor.domicile.herd + } + desc = DEMAND_OBEDIENCE_INTERACTION_HERD_ACCEPTANCE + } + modifier = { + add = -500 + scope:recipient = { + current_military_strength >= 100 + current_military_strength > scope:actor.current_military_strength + } + desc = DEMAND_OBEDIENCE_INTERACTION_MILITARY_MIGHT_ACCEPTANCE + } + modifier = { + add = 10 + scope:recipient = { + has_trait = craven + } + desc = BLACKMAIL_INTERACTION_CRAVEN_ACCEPTANCE + } + modifier = { + add = 10 + scope:recipient = { + has_trait = content + } + desc = DEMAND_OBEDIENCE_INTERACTION_CONTENT_ACCEPTANCE + } + modifier = { + add = 25 + any_character_situation = { + any_situation_sub_region = { + has_sub_region_phase_parameter = the_great_steppe_easier_obedience + any_situation_sub_region_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = scope:actor + } + } + } + desc = DEMAND_OBEDIENCE_INTERACTION_ZUD_ACCEPTANCE + } + bp2_hostage_dread_modifier = yes + } + + ai_will_do = { + base = 0 + modifier = { + scope:herd ?= yes + add = -1 + } + modifier = { + scope:gold ?= yes + add = -1 + } + modifier = { + scope:hook ?= yes + add = -1 + } + modifier = { + scope:recipient = { + is_kurultai_trigger = yes + } + add = 100 + } + } + + cooldown_against_recipient = { years = 10 } + + ai_targets = { # They will try to get a Stable Succession + ai_recipients = councillors + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = mpo_demand_obedience_interaction_toast + left_icon = scope:recipient + # Pay what you need to pay first + if = { + limit = { scope:hook = yes } + use_hook = scope:recipient + } + if = { + limit = { scope:gold = yes } + pay_short_term_gold = { + target = scope:recipient + gold = medium_gold_value + } + } + if = { + limit = { scope:herd = yes } + if = { + limit = { exists = scope:recipient.domicile } + pay_herd = { + target = scope:recipient + value = domicile.medium_herd_value + } + } + else = { # For a nice tooltip + show_as_tooltip = { + pay_herd = { + target = scope:recipient + value = domicile.medium_herd_value + } + } + hidden_effect = { domicile = { change_herd = medium_herd_loss } } + } + } + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = obedience_opinion + } + } + } + } + } +} + +join_confederation_interaction = { + category = interaction_category_diplomacy + icon = offer_confederation_interaction + + desc = join_confederation_interaction_desc + + ai_targets = { + ai_recipients = neighboring_rulers_including_tributary_borders + } + ai_frequency = 8 + popup_on_receive = yes + pause_on_receive = yes + + common_interaction = yes + + cooldown_against_recipient = { years = 3 } + + is_shown = { + scope:actor = { + is_playable_character = yes + is_independent_ruler = yes + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_tribal + } + highest_held_title_tier <= tier_duchy + is_landed = yes + is_confederation_member = no + } + scope:recipient = { + is_confederation_member = yes + } + } + + is_valid_showing_failures_only = { + scope:actor = { + valid_confederation_member_trigger = { CHARACTER = scope:recipient } + is_imprisoned = no + is_at_war = no + NOR = { + has_trait = conqueror + has_trait = greatest_of_khans + } + } + } + + cost = { + prestige = { + value = 0 + if = { + limit = { scope:prestige_send_option = yes } + add = scope:actor.minor_prestige_value + desc = PRESTIGE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + } + } + + greeting = positive + notification_text = OFFER_CONFEDERATION_INTERACTION_NOTIFICATION + + ai_accept = { + base = -50 + + modifier = { # Cultural Acceptance + add = offer_vassalage_acceptance_value + desc = cultural_acceptance_interaction_reason + trigger = { + scope:actor = { + NOT = { has_same_culture_as = scope:recipient } + culture = { + cultural_acceptance = { target = scope:recipient.culture value <= 90 } + } + } + } + } + + modifier = { #Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { #Of two different faiths AND the potential vassal's faith is not pluralistic. + faith = scope:actor.faith + faith = { has_doctrine = doctrine_pluralism_pluralistic } + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + } + add = { + value = -30 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -30 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -30 + } + } + } + + modifier = { #Different faith, pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { + faith = scope:actor.faith + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -15 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -15 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -15 + } + } + } + + modifier = { #Different faith, both have pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:recipient = { + NOR = { + faith = scope:actor.faith + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic } + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + add = { + value = -10 + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:recipient.faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_evil_level + } + } + } + add = -10 + } + } + } + modifier = { #We just fought against each other. + desc = offer_vassalization_interaction_aibehavior_recent_war_tt + trigger = { + scope:recipient = { + any_truce_holder = { + this = scope:actor + } + } + # Ensure the truce wasn't purchased and is indeed from a war + scope:actor = { + NOT = { + has_purchased_truce_with_char = { TARGET = scope:recipient } + } + } + } + add = -40 + } + modifier = { #You fought an independence war against me + desc = offer_confederation_independence_war_reverse_tt + trigger = { + scope:actor = { + exists = var:independence_war_former_liege + var:independence_war_former_liege = scope:recipient.top_liege + } + } + add = -100 + } + modifier = { #I fought an independence war against you. + desc = offer_confederation_independence_war_tt + trigger = { + scope:recipient = { + exists = var:independence_war_former_liege + var:independence_war_former_liege = scope:actor.top_liege + } + } + add = -50 + } + modifier = { #Bankrupt + desc = bankrupt_reason + trigger = { + scope:actor.gold <= -1 + } + add = -30 + } + modifier = { #Wide difference in rank + desc = offer_vassalization_interaction_aibehavior_widetitletier_tt + trigger = { + scope:actor = { + tier_difference = { + target = scope:recipient + value > 1 + } + } + } + add = 10 + } + modifier = { # Allied + desc = offer_vassalization_interaction_aibehavior_allied_tt + trigger = { + scope:recipient = { + is_allied_to = scope:actor + } + } + add = 50 + } + modifier = { # Is the Rightful Liege of actor + desc = offer_vassalization_interaction_aibehavior_rightfulvassaltitleholder_tt + trigger = { + scope:recipient = { is_rightful_liege_of = scope:actor } + } + add = -75 + } + modifier = { # Is the Rightful Liege of recipient + desc = offer_vassalization_interaction_aibehavior_rightfulliegetitleholder_tt + trigger = { + scope:actor = { is_rightful_liege_of = scope:recipient } + } + add = 20 + } + modifier = { #No adjacency + desc = offer_vassalization_interaction_aibehavior_unconnectedrealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value < 100000 } } + } + add = -25 + } + modifier = { #Distant Realm + desc = offer_vassalization_interaction_aibehavior_distantrealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 100000 } } + } + add = -50 + } + modifier = { #Remote Realm. + desc = offer_vassalization_interaction_aibehavior_remoterealm_tt + trigger = { + scope:recipient = { + NOT = { + any_land_neighboring_realm_with_tributaries_owner = { + OR = { + this = scope:actor + AND = { + exists = scope:actor.confederation + is_member_of_confederation = scope:actor.confederation + } + AND = { + exists = scope:actor.confederation + suzerain ?= { + is_member_of_confederation = scope:actor.confederation + } + } + suzerain ?= { + this = scope:actor + } + } + } + } + } + scope:recipient.capital_province = { squared_distance = { target = scope:actor.capital_province value >= 200000 } } + } + add = -125 + } + #Relative power + modifier = { + desc = offer_vassalization_interaction_aibehavior_power_tt + add = { + value = 1 + subtract = { + value = scope:recipient.max_military_strength # Intended for recipient to use max, to avoid having vassalizations become too easy for weakened realms + divide = { value = scope:actor.top_liege.current_military_strength min = 1 } + } + multiply = 5 + ceiling = yes + min = -100 + } + } + + #Powerful vassal opinion of you + modifier = { + desc = offer_confederation_offerer_vassal_opinion_tt + trigger = { + scope:actor.top_liege = { + number_of_powerful_vassals >= 1 + } + } + + add = { + value = 0 + scope:actor.top_liege = { + every_powerful_vassal = { + if = { + limit = { + save_temporary_opinion_value_as = { + name = vassal_opinion + target = scope:actor.top_liege + } + } + add = scope:vassal_opinion + } + } + + if = { + limit = { + number_of_powerful_vassals > 0 + } + divide = number_of_powerful_vassals + } + else = { + divide = 5 + } + } + + divide = 10 + } + } + + modifier = { #Friend modifier. + desc = offer_vassalization_interaction_aibehavior_friend_tt + trigger = { + scope:recipient = { + has_relation_friend = scope:actor + NOT = { has_relation_best_friend = scope:actor } + } + } + add = 25 + } + modifier = { #Best Friend modifier. + desc = offer_vassalization_interaction_aibehavior_best_friend_tt + trigger = { + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + add = 50 + } + modifier = { #Lover modifier. + desc = interaction_lover + trigger = { + scope:recipient = { + has_relation_lover = scope:actor + NOT = { has_relation_soulmate = scope:actor } + } + } + add = 25 + } + modifier = { #Soulmate modifier. + desc = interaction_soulmate + trigger = { + scope:recipient = { + has_relation_soulmate = scope:actor + } + } + add = 50 + } + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:recipient = { + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + add = -200 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + add = -1000 + } + modifier = { #Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_confederation_tt + trigger = { + scope:recipient.confederation = { + any_confederation_member = { + NOT = { + this = scope:recipient + } + has_relation_rival = scope:actor + NOT = { has_relation_nemesis = scope:actor } + } + } + } + add = -100 + } + modifier = { #Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_confederation_tt + trigger = { + scope:recipient.confederation = { + any_confederation_member = { + NOT = { + this = scope:recipient + } + has_relation_nemesis = scope:actor + } + } + } + add = -500 + } + + modifier = { #Same Dynasty modifier. + desc = offer_vassalization_interaction_aibehavior_dynasty_tt + trigger = { + exists = scope:actor.dynasty + exists = scope:recipient.dynasty + scope:recipient = { + dynasty = scope:actor.dynasty + } + } + add = 25 + } + + modifier = { #Same House modifier. + desc = offer_vassalization_interaction_aibehavior_house_tt + trigger = { + exists = scope:actor.house + exists = scope:recipient.house + scope:recipient = { + house = scope:actor.house + } + } + add = 50 + } + + modifier = { # Same language + add = 20 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + modifier = { #Ageism modifier vs kids. + desc = offer_vassalization_interaction_aibehavior_child_tt + trigger = { + scope:actor = { + age < 12 + } + scope:recipient = { + age > 16 + } + } + add = -5 + } + + modifier = { #Illegitimacy modifier. + desc = confederation_offerer_illegitimate_tt + trigger = { + scope:actor.top_liege = { + OR = { + AND = { + has_trait = bastard + scope:recipient = { + faith = { NOT = { has_doctrine = doctrine_bastardry_none } } + } + } + has_trait = denounced + has_trait = disinherited + } + } + } + add = -20 + } + + modifier = { #Claimant modifier. + desc = confederation_interaction_aibehavior_claimant_tt + trigger = { + scope:actor = { + any_held_title = { + scope:recipient = { + has_claim_on = prev + } + } + } + } + add = -50 + } + + modifier = { # Ambitious + desc = TAKE_THE_VOWS_AMBITIOUS + trigger = { + scope:recipient = { + has_trait = ambitious + } + } + add = -25 + } + + modifier = { # Paranoid + desc = INTERACTION_PARANOID + trigger = { + scope:recipient = { + has_trait = paranoid + } + } + add = -25 + } + + modifier = { # Arrogant + desc = INTERACTION_ARROGANT + trigger = { + scope:recipient = { + has_trait = arrogant + } + } + add = -25 + } + + modifier = { # Greedy + desc = INTERACTION_GREEDY + trigger = { + scope:recipient = { + has_trait = greedy + } + } + add = -15 + } + + modifier = { # Trusting + desc = TAKE_THE_VOWS_TRUSTING + trigger = { + scope:recipient = { + has_trait = trusting + } + } + add = 15 + } + + modifier = { # Craven + desc = INTERACTION_CRAVEN + trigger = { + scope:recipient = { + has_trait = craven + } + } + add = 25 + } + + opinion_modifier = { #Compare Opinion modifier. + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.35 + } + modifier = { + add = intimidated_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = INTIMIDATED_REASON + } + modifier = { + add = cowed_external_reason_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = COWED_REASON + } + # DIPLOMATIC COURT GRANDEUR BONUS + modifier = { + trigger = { + scope:actor.top_liege = { + has_royal_court = yes + has_dlc_feature = royal_court + has_court_type = court_diplomatic + court_grandeur_current_level >= 1 + } + } + add = { + value = scope:actor.top_liege.court_grandeur_current + if = { + limit = { # Reduce the bonus if you are below your expected level + scope:actor.top_liege = { + court_grandeur_current_level < court_grandeur_minimum_expected_level + } + } + multiply = 0.15 + } + else = { + multiply = 0.3 + } + } + desc = DIPLOMATIC_COURT_ACCEPTANCE_INCREASE_REASON + } + + # LOW LEGITIMACY + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -10 + scope:actor = { + has_legitimacy_flag = reduced_confederation_acceptance + } + } + modifier = { + desc = "LOW_LEGITIMACY_REASON" + add = -25 + scope:actor = { + has_legitimacy_flag = very_reduced_confederation_acceptance + } + } + + # HIGH LEGITIMACY + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 15 + scope:actor = { + has_legitimacy_flag = increased_confederation_acceptance + } + } + modifier = { + desc = "HIGH_LEGITIMACY_REASON" + add = 40 + scope:actor = { + has_legitimacy_flag = very_increased_confederation_acceptance + } + } + + modifier = { + add = 50 + scope:actor = { + culture = scope:recipient.culture + } + desc = "SAME_CULTURE_REASON" + } + modifier = { + add = -20 + NOT = { + scope:actor = { + culture = scope:recipient.culture + } + } + scope:actor = { + NOR = { + culture = { + any_parent_culture_or_above = { + this = scope:recipient.culture + } + } + scope:recipient.culture = { + any_parent_culture_or_above = { + this = scope:actor.culture + } + } + culture = { + has_same_culture_heritage = scope:recipient.culture + } + } + } + desc = "DIFFERENT_CULTURE_REASON" + } + # Are you using a hook? + modifier = { + trigger = { + scope:hook ?= yes + } + add = 100 + desc = LEGEND_HOOK_USED + } + # PRESTIGE + modifier = { + add = 40 + scope:prestige_send_option = yes + desc = PRESTIGE_INTERACTION_ACCEPTANCE_SEND_OPTION + } + # HERD + modifier = { + add = 40 + scope:herd_send_option = yes + desc = HERD_INTERACTION_ACCEPTANCE_SEND_OPTION + } + modifier = { + add = 20 + desc = join_confederation_neighboring_foe_tt + scope:recipient = { + confederation_neighboring_foe_trigger = { CHARACTER = scope:recipient } + } + } + #No neighbor scaring them + modifier = { + add = -30 + desc = NO_FRIGHTENING_NEIGHBOR_REASON + NOT = { + scope:recipient = { + confederation_neighboring_foe_trigger = { CHARACTER = scope:recipient } + } + } + } + #Neighbor is TERRIFYING them + modifier = { + add = 50 + desc = TERRIFYING_NEIGHBOR_REASON + scope:recipient = { + save_temporary_scope_as = confederate + any_land_neighboring_realm_with_tributaries_owner = { + top_suzerain ?= { + NOR = { + this = scope:actor + this = scope:actor.top_liege + } + confederation_worthy_foe_strength_ratio_value <= 0.25 + NOT = { is_allied_to = scope:recipient } + OR = { + highest_held_title_tier >= tier_kingdom + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_evil_level + } + } + has_trait = conqueror + has_trait = greatest_of_khans + any_owned_story = { + OR = { + story_type = story_greatest_of_khans + story_type = story_mongol_invasion + } + } + } + } + } + } + } + modifier = { + add = 100 + desc = JOINING_CONFEDERATION_WAR_REASON + scope:recipient = { + confederation = { + any_confederation_member = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = prev + is_defender = prev + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_defender = { + this = scope:actor + } + } + defender_war_score < 80 + } + } + } + } + } + + modifier = { + add = -100 + desc = join_confederation_abandoned_confederation_tt + scope:actor = { + has_variable = left_confederation + var:left_confederation ?= { + this = scope:recipient.confederation + } + } + } + modifier = { + add = -100 + desc = join_confederation_abandoned_confederation_tt + scope:actor = { + has_variable = left_confederation + var:left_confederation ?= { + this = scope:recipient.confederation + } + } + } + modifier = { + add = duchy_confederation_vassals_value_recipient + desc = TOO_MANY_CONFEDERATION_VASSALS_REASON + scope:recipient.confederation = { + any_confederation_member = { + count >= 6 + highest_held_title_tier >= tier_county + } + } + } + + modifier = { + add = 50 + desc = join_confederation_loyal_tt + scope:actor = { + has_trait = loyal + } + } + modifier = { + add = -50 + desc = join_confederation_disloyal_tt + scope:actor = { + has_trait = disloyal + } + } + } + + send_option = { + flag = hook + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + localization = GENERIC_SPEND_A_HOOK + } + + send_option = { # Herd + is_shown = { + scope:actor = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + is_valid = { + scope:recipient = { + government_has_flag = government_is_nomadic + exists = domicile + } + scope:actor.domicile = { herd >= minor_herd_value } + } + flag = herd_send_option + localization = TRADE_HERD_FOR_BETTER_AI_ACCEPTANCE_CONFEDERATION + } + + send_option = { # Prestige + is_shown = { + always = yes + } + is_valid = { + scope:actor = { prestige >= minor_prestige_value } + } + flag = prestige_send_option + localization = TRADE_PRESTIGE_FOR_BETTER_AI_ACCEPTANCE + } + + send_options_exclusive = no + + on_accept = { + if = { + #checking that the delay hasn't made the character invalid + limit = { + scope:recipient = { + is_playable_character = yes + } + } + if = { + limit = { + scope:actor = { + has_character_flag = forming_confederation + } + } + scope:actor = { remove_character_flag = forming_confederation } + } + if = { + limit = { + scope:recipient.confederation = { + any_confederation_member = { + is_at_war_as_defender = yes + any_character_war = { + is_war_leader = prev + is_defender = prev + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_defender = { + this = scope:actor + } + } + defender_war_score < 80 + } + } + } + } + scope:recipient.confederation = { + every_confederation_member = { + limit = { + is_at_war_as_defender = yes + } + every_character_war = { + limit = { + is_war_leader = prev + is_defender = prev + NOR = { + any_war_attacker = { + is_allied_to = scope:actor + } + any_war_attacker = { + this = scope:actor + } + any_war_defender = { + this = scope:actor + } + } + defender_war_score < 80 + } + add_to_list = recipient_wars + } + } + } + every_in_list = { + list = recipient_wars + save_scope_as = recipient_war + primary_attacker = { + save_scope_as = attacker + } + add_defender = scope:actor + } + } + scope:recipient = { + save_scope_as = confederation_offerer + } + scope:actor = { + save_scope_as = confederation_accepter + } + scope:recipient.confederation = { + save_scope_as = confederation + } + show_as_tooltip = { + #If actor is top liege and offering vassaldom + scope:actor = { + custom_tooltip = join_confederation_recipient_tt + custom_tooltip = confederation_defensive_wars_tt + custom_tooltip = unlock_leave_confederation_interaction_tt + } + } + if = { + limit = { + scope:actor = { + government_has_flag = government_is_nomadic + } + } + scope:actor = { + add_character_modifier = { + modifier = mpo_confederation_member_modifier + years = 5 + } + capital_county ?= { + change_county_fertility = major_county_fertility_level_gain + } + } + } + if = { + limit = { + scope:actor = { + is_ai = no + } + } + scope:actor = { + custom_tooltip = confederation_raiding_attacking_tt + if = { + limit = { + government_has_flag = government_is_nomadic + } + custom_tooltip = confederation_restrictions_warning_tt + } + else = { + custom_tooltip = confederation_restrictions_tribe_warning_tt + } + } + } + scope:actor = { + if = { + limit = { + government_has_flag = government_is_nomadic + } + custom_tooltip = confederation_migrating_leaving_warning_tt + } + } + scope:actor = { + #Event distributor event + trigger_event = mpo_interactions_events.0030 + } + if = { + limit = { + scope:prestige_send_option = yes + } + scope:recipient = { + add_prestige = scope:actor.minor_prestige_value + } + } + if = { + limit = { + scope:herd_send_option = yes + } + scope:actor = { + pay_herd = { + target = scope:recipient + value = domicile.minor_herd_value + } + } + } + } + } + + on_decline = { + scope:actor = { + #So that the right desc is used + save_scope_as = asking_to_join + #letter response + trigger_event = mpo_interactions_events.0004 + } + } + + ai_potential = { + #AI rely on the offer interaction, not this one + always = no + } + + ai_will_do = { + base = 0 + } +} diff --git a/common/culture/traditions/00_realm_traditions.txt b/common/culture/traditions/00_realm_traditions.txt index ed71f0cf..51685916 100644 --- a/common/culture/traditions/00_realm_traditions.txt +++ b/common/culture/traditions/00_realm_traditions.txt @@ -344,7 +344,7 @@ tradition_republican_legacy = { scope:character = { any_vassal = { primary_title.tier > tier_county - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } @@ -2280,7 +2280,7 @@ tradition_parochialism = { scope:character = { any_vassal = { primary_title.tier > tier_county - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } } diff --git a/common/culture/traditions/07_ep3_traditions.txt b/common/culture/traditions/07_ep3_traditions.txt index 41b35749..cd23b6ea 100644 --- a/common/culture/traditions/07_ep3_traditions.txt +++ b/common/culture/traditions/07_ep3_traditions.txt @@ -360,7 +360,7 @@ tradition_ep3_imperial_tagmata = { if = { limit = { # Admin should be more into this scope:character = { - government_allows = administrative + government_has_flag = government_is_administrative } } multiply = 2 @@ -478,7 +478,7 @@ tradition_ep3_roman_ceremonies = { if = { limit = { # Admin should be more into this scope:character = { - government_allows = administrative + government_has_flag = government_is_administrative } } multiply = 2 @@ -604,7 +604,7 @@ tradition_ep3_palace_politics = { if = { limit = { # Admin should be more into this scope:character = { - government_allows = administrative + government_has_flag = government_is_administrative } } multiply = 2 @@ -628,7 +628,7 @@ tradition_ep3_cultivated_sophistication = { can_pick = { custom_tooltip = { text = must_have_administrative_government_tt - scope:character = { government_allows = administrative } + scope:character = { government_has_flag = government_is_administrative } } } diff --git a/common/customizable_localization/00_appropriate_generic_words.txt b/common/customizable_localization/00_appropriate_generic_words.txt index 3c321ab2..850ac77e 100644 --- a/common/customizable_localization/00_appropriate_generic_words.txt +++ b/common/customizable_localization/00_appropriate_generic_words.txt @@ -424,6 +424,14 @@ GetRandomRegionalSmallGame = { } localization_key = animal_gerbil } + text = { + trigger = { + location = { + geographical_region = world_steppe + } + } + localization_key = animal_marmot + } } GetRandomRegionalSmallGamePlural = { diff --git a/common/customizable_localization/00_artifact_custom_loc.txt b/common/customizable_localization/00_artifact_custom_loc.txt index c5dc0432..98c62c96 100644 --- a/common/customizable_localization/00_artifact_custom_loc.txt +++ b/common/customizable_localization/00_artifact_custom_loc.txt @@ -2690,8 +2690,8 @@ RegionalMythicalCreature = { } trigger_else_if = { limit = { - NOR = { - location = { + location = { + NOR = { geographical_region = world_europe_west_britannia geographical_region = world_europe_west geographical_region = world_europe_north @@ -3260,8 +3260,8 @@ RegionalMythicalCreatureLower = { #Our fallback option trigger_else_if = { limit = { - NOR = { - location = { + location = { + NOR = { geographical_region = world_europe_west_britannia geographical_region = world_europe_west geographical_region = world_europe_north @@ -3516,10 +3516,10 @@ ArtifactMarcoPoloIntro = { type = artifact random_valid = yes text = { - localization_key = marco_polo_quote_intro_1 + localization_key = marco_polo_quote_artifact_intro_1 } text = { - localization_key = marco_polo_quote_intro_2 + localization_key = marco_polo_quote_artifact_intro_2 } } @@ -3528,19 +3528,25 @@ ArtifactMarcoPoloDesc = { type = artifact random_valid = yes text = { - localization_key = marco_polo_quote_desc_1 + localization_key = marco_polo_quote_artifact_desc_1 } text = { - localization_key = marco_polo_quote_desc_2 + localization_key = marco_polo_quote_artifact_desc_2 } text = { - localization_key = marco_polo_quote_desc_3 + localization_key = marco_polo_quote_artifact_desc_3 } text = { - localization_key = marco_polo_quote_desc_4 + localization_key = marco_polo_quote_artifact_desc_4 } text = { - localization_key = marco_polo_quote_desc_5 + localization_key = marco_polo_quote_artifact_desc_5 + } + text = { + localization_key = marco_polo_quote_artifact_desc_6 + } + text = { + localization_key = marco_polo_quote_artifact_desc_7 } } @@ -3549,9 +3555,9 @@ ArtifactMarcoPoloEnd = { type = artifact random_valid = yes text = { - localization_key = marco_polo_quote_end_1 + localization_key = marco_polo_quote_artifact_end_1 } text = { - localization_key = marco_polo_quote_end_2 + localization_key = marco_polo_quote_artifact_end_2 } } diff --git a/common/customizable_localization/00_bp3_wanderer_loc.txt b/common/customizable_localization/00_bp3_wanderer_loc.txt index 3d8713b4..66a0650d 100644 --- a/common/customizable_localization/00_bp3_wanderer_loc.txt +++ b/common/customizable_localization/00_bp3_wanderer_loc.txt @@ -384,3 +384,87 @@ RiverNameLoc = { localization_key = RiverNameNotTheNile } } + +TerrainInspirationLoc = { + type = province + + text = { + trigger = { + terrain = mountains + } + localization_key = TerrainInspirationMountains + } + text = { + trigger = { + terrain = hills + } + localization_key = TerrainInspirationHills + } + text = { + trigger = { + terrain = jungle + } + localization_key = TerrainInspirationJungle + } + text = { + trigger = { + terrain = taiga + } + localization_key = TerrainInspirationTaiga + } + text = { + trigger = { + terrain = wetlands + } + localization_key = TerrainInspirationWetlands + } + text = { + trigger = { + terrain = floodplains + } + localization_key = TerrainInspirationFloodplains + } + text = { + trigger = { + terrain = desert + } + localization_key = TerrainInspirationDesert + } + text = { + trigger = { + terrain = forest + } + localization_key = TerrainInspirationForest + } + text = { + trigger = { + terrain = farmlands + } + localization_key = TerrainInspirationFarmlands + } + text = { + trigger = { + terrain = steppe + } + localization_key = TerrainInspirationSteppe + } + text = { + trigger = { + terrain = drylands + } + localization_key = TerrainInspirationdrylands + } +} + +DynamicIntroLoc = { + type = character + + text = { + trigger = { is_landed = yes } + localization_key = DynamicIntroLanded + } + text = { + trigger = { is_landed = no } + localization_key = DynamicIntroWanderer + } +} diff --git a/common/customizable_localization/00_building_custom_localization.txt b/common/customizable_localization/00_building_custom_localization.txt index 0f2aecdc..1d68098f 100644 --- a/common/customizable_localization/00_building_custom_localization.txt +++ b/common/customizable_localization/00_building_custom_localization.txt @@ -1546,6 +1546,149 @@ GetSpecialBuildingNameFromProvince = { localization_key = building_hall_of_heroes_05 } + text = { # Drassanes + trigger = { + has_special_building = yes + has_building = drassanes_01 + } + localization_key = building_drassanes_01 + } + + text = { # Wallss of York + trigger = { + has_special_building = yes + has_building = york_walls_01 + } + localization_key = building_york_walls_01 + } + + text = { # Great Mosque of Damascus + trigger = { + has_special_building = yes + has_building = damascus_mosque_01 + } + localization_key = building_damascus_mosque_01 + } + + text = { # Jokhang Temple + trigger = { + has_special_building = yes + has_building = jokhang_01 + } + localization_key = building_jokhang_01 + } + + text = { # Wartburg + trigger = { + has_special_building = yes + has_building = wartburg_01 + } + localization_key = building_wartburg_01 + } + + text = { # Beta Giyorgis + trigger = { + has_special_building = yes + has_building = beta_giyorgis_01 + } + localization_key = building_beta_giyorgis_01 + } + + text = { # Holy Wisdom of God Cathedral + trigger = { + has_special_building = yes + has_building = holy_wisdom_01 + } + localization_key = building_holy_wisdom_01 + } + + text = { # Santa Reparata + trigger = { + has_special_building = yes + has_building = duomo_florence_01 + } + localization_key = building_duomo_florence_01 + } + + text = { # St John Baptistery + trigger = { + has_special_building = yes + has_building = duomo_florence_02 + } + localization_key = building_duomo_florence_02 + } + + text = { # Santa Maria del Fiore + trigger = { + has_special_building = yes + OR = { + has_building = duomo_florence_03 + has_building = duomo_florence_04 + } + } + localization_key = building_duomo_florence_03 + } + + text = { # Konark Sun Temple + trigger = { + has_special_building = yes + has_building = konark_temple_01 + } + localization_key = building_konark_temple_01 + } + + text = { # Kairouan Basins + trigger = { + has_special_building = yes + has_building = kairouan_basins_01 + } + localization_key = building_kairouan_basins_01 + } + + text = { # Ghana Palace + trigger = { + has_special_building = yes + has_building = ghana_palace_01 + } + localization_key = building_ghana_palace_01 + } + + text = { # Visegrad Castle + trigger = { + has_special_building = yes + has_building = visegrad_castle_01 + } + localization_key = building_visegrad_castle_01 + } + + text = { # Archcollegiate Church of St. Mary and St. Alexius in Tum + trigger = { + has_special_building = yes + OR = { + has_building = wawel_cathedral_01 + has_building = wawel_cathedral_02 + has_building = wawel_cathedral_03 + } + } + localization_key = building_wawel_cathedral_01 + } + + text = { # Vatapi Caves + trigger = { + has_special_building = yes + has_building = vatapi_caves_01 + } + localization_key = building_vatapi_caves_01 + } + + text = { # Golden Fort of Jaisalmer + trigger = { + has_special_building = yes + has_building = jaisalmer_fort_01 + } + localization_key = building_jaisalmer_fort_01 + } + ### UNIVERSITIES text = { # Generic University @@ -1596,6 +1739,35 @@ GetSpecialBuildingNameFromProvince = { localization_key = building_nalanda_university } + text = { # Somapura University + trigger = { + has_special_building = yes + has_building = nalanda_university + } + localization_key = building_somapura_university_01 + } + + text = { # Somapura University + trigger = { + has_special_building = yes + OR = { + has_building = cluny_abbey_01 + has_building = cluny_abbey_02 + } + } + localization_key = building_cluny_abbey_01 + } + + #Al qarawiyyin University + text = { + trigger = { + has_special_building = yes + has_building = al_qarawiyyin_university_01 + } + localization_key = building_al_qarawiyyin_university_01 + } + + ### MISC text = { # Sicilian Parliament diff --git a/common/customizable_localization/00_character_interaction_categories.txt b/common/customizable_localization/00_character_interaction_categories.txt new file mode 100644 index 00000000..0b74222a --- /dev/null +++ b/common/customizable_localization/00_character_interaction_categories.txt @@ -0,0 +1,137 @@ +CharacterInteractionCategoryVassal = { + type = character + + # LIEGE + + text = { + localization_key = interaction_category_vassal_liege + trigger = { + scope:second = { + any_vassal_or_below = { + this = root + } + } + } + } + + # SUZERAIN + + text = { + localization_key = interaction_category_vassal_suzerain + trigger = { + is_tributary_of = scope:second + } + } + + # GOVERNOR + text = { + localization_key = interaction_category_vassal_governor + trigger = { + scope:second = { + government_has_flag = government_is_administrative + is_governor = yes + } + + any_vassal_or_below = { + this = scope:second + } + } + } + + # VASSAL + + text = { + localization_key = interaction_category_vassal_vassal + trigger = { + any_vassal_or_below = { + this = scope:second + } + } + } + + # TRIBUTARY + + text = { + localization_key = interaction_category_vassal_tributary + trigger = { + scope:second = { + is_tributary_of = prev + } + } + } + + # FELLOW GOVERNOR + + text = { + localization_key = interaction_category_vassal_fellow_governor + trigger = { + scope:second = { + is_independent_ruler = no + government_has_flag = government_is_administrative + is_governor = yes + } + is_independent_ruler = no + liege = scope:second.liege + government_has_flag = government_is_administrative + is_governor = yes + } + } + + # FELLOW VASSAL + + text = { + localization_key = interaction_category_vassal_fellow_vassal + trigger = { + scope:second = { + is_independent_ruler = no + } + is_independent_ruler = no + liege = scope:second.liege + } + } + + # COURTIER + + text = { + localization_key = interaction_category_vassal_courtier + trigger = { + scope:second = { + is_courtier_of = root + } + } + } + + # FALLBACK + + text = { + localization_key = interaction_category_vassal_fallback + trigger = { + always = yes + } + } + +} + + +CharacterInteractionCategoryPowerSharing = { + type = character + + # Could have one for "Liege" here but would confuse things with CharacterInteractionCategoryVassal + + text = { + localization_key = interaction_category_diarch_diarch + trigger = { + scope:second = { + is_diarch = yes + liege = root + } + } + } + + text = { + localization_key = interaction_category_diarch_fallback + trigger = { + always = yes + } + } +} diff --git a/common/customizable_localization/00_councillor_custom_loc.txt b/common/customizable_localization/00_councillor_custom_loc.txt index 204cb2ce..32030c9c 100644 --- a/common/customizable_localization/00_councillor_custom_loc.txt +++ b/common/customizable_localization/00_councillor_custom_loc.txt @@ -38,6 +38,13 @@ } localization_key = councillor_court_chaplain } + + text = { + trigger = { + is_kurultai_trigger = yes + } + localization_key = councillor_kurultai + } } councillor_flavor_prop = { @@ -65,3 +72,48 @@ councillor_flavor_prop = { localization_key = councillor_prop_robe } } + +GetCouncilWindowTitle = { + type = character + + text = { + trigger = { + is_nomad = yes + } + localization_key = COUNCIL_WINDOW_TITLE_KURULTAI + } + text = { + fallback = yes + localization_key = COUNCIL_WINDOW_TITLE_GENERIC + } +} + +GetCouncillorKurultaiMember = { + type = character + + text = { + trigger = { + liege ?= { is_nomad = yes } + } + localization_key = kurultai_member + } + text = { + fallback = yes + localization_key = councillor + } +} + +GetCouncillorKurultaiMemberPossessive = { + type = character + + text = { + trigger = { + liege ?= { is_nomad = yes } + } + localization_key = kurultai_member_possessive + } + text = { + fallback = yes + localization_key = councillor_possive + } +} diff --git a/common/customizable_localization/00_event_custom_loc.txt b/common/customizable_localization/00_event_custom_loc.txt index 5566d33a..79f36843 100644 --- a/common/customizable_localization/00_event_custom_loc.txt +++ b/common/customizable_localization/00_event_custom_loc.txt @@ -135,21 +135,21 @@ text = { trigger = { - government_allows = administrative + government_has_flag = government_is_administrative } localization_key = private_object_wooden_staff } text = { trigger = { - government_allows = administrative + government_has_flag = government_is_administrative } localization_key = private_object_golden_staff } text = { trigger = { - government_allows = administrative + government_has_flag = government_is_administrative } localization_key = private_object_gilded_staff } diff --git a/common/customizable_localization/00_food_custom_loc.txt b/common/customizable_localization/00_food_custom_loc.txt index a66b3575..0d04dd8d 100644 --- a/common/customizable_localization/00_food_custom_loc.txt +++ b/common/customizable_localization/00_food_custom_loc.txt @@ -582,6 +582,135 @@ RegionalEdibleAnimal = { localization_key = regional_edible_animal_gazelle } + #Marmot + text = { + trigger = { + location = { + geographical_region = world_steppe + } + culture = { + OR = { + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_ugro_permian + } + } + } + localization_key = regional_edible_animal_marmot + } + + #Goat + text = { + localization_key = regional_edible_animal_goat + } +} + +RegionalEdibleAnimalPlural = { + type = character + random_valid = yes + + #Hart + text = { + localization_key = regional_edible_animal_hart_plural + } + + #Chicken + text = { + localization_key = regional_edible_animal_chicken_plural + } + + #Hare + text = { + localization_key = regional_edible_animal_hare_plural + } + + #Sheep + text = { + localization_key = regional_edible_animal_lamb_plural + } + + #Pig + text = { + trigger = { + faith = { + NOR = { + religion_tag = islam_religion + religion_tag = judaism_religion + } + } + root.faith = { + NOR = { + religion_tag = islam_religion + religion_tag = judaism_religion + } + } + } + localization_key = regional_edible_animal_pig_plural + } + + #Beef + text = { + trigger = { + faith = { + NOT = { religion_tag = hinduism_religion } + } + root.faith = { + NOT = { religion_tag = hinduism_religion } + } + } + localization_key = regional_edible_animal_ox_plural + } + + #Boar + text = { + trigger = { + faith = { + NOR = { + religion_tag = islam_religion + religion_tag = judaism_religion + } + } + root.faith = { + NOR = { + religion_tag = islam_religion + religion_tag = judaism_religion + } + } + } + localization_key = regional_edible_animal_boar_plural + } + + #Gazelle + text = { + trigger = { + location = { + geographical_region = world_africa + } + } + localization_key = regional_edible_animal_gazelle_plural + } + + #Marmot + text = { + trigger = { + location = { + geographical_region = world_steppe + } + culture = { + OR = { + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_ugro_permian + } + } + } + localization_key = regional_edible_animal_marmot_plural + } + + #Goat + text = { + localization_key = regional_edible_animal_goat_plural + } } RegionalEdibleMeat = { @@ -638,8 +767,29 @@ RegionalEdibleMeat = { } } localization_key = regional_edible_meat_pork - } + } + #Marmot + text = { + trigger = { + location = { + geographical_region = world_steppe + } + culture = { + OR = { + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_ugro_permian + } + } + } + localization_key = regional_edible_meat_marmot + } + + #Goat + text = { + localization_key = regional_edible_meat_goat + } } #Favourite Treat diff --git a/common/customizable_localization/00_government_custom_loc.txt b/common/customizable_localization/00_government_custom_loc.txt index d644bc73..292ecbd5 100644 --- a/common/customizable_localization/00_government_custom_loc.txt +++ b/common/customizable_localization/00_government_custom_loc.txt @@ -421,7 +421,19 @@ GetRealmOrDomicile = { GetRealmOrDomicileTooltip = { type = character - + + text = { + trigger = { + trigger_if = { + limit = { is_ruler = yes } + is_nomad = yes + } + trigger_else = { + liege ?= { is_nomad = yes } + } + } + localization_key = NOMAD + } text = { trigger = { trigger_if = { @@ -569,6 +581,20 @@ GetRealmOrDomicileConcept = { } } +GetCourtPosition = { + type = character + + text = { + trigger = { is_landed = no } + localization_key = game_concept_officer + } + text = { + trigger = { always = no } + localization_key = game_concept_court_position + fallback = yes + } +} + GetCourtPositionPlural = { type = character @@ -778,6 +804,12 @@ GetGameKeepers = { } localization_key = flushers_adventurer } + text = { + trigger = { + government_has_flag = government_is_nomadic + } + localization_key = gamekeepers_nomadic + } text = { trigger = { always = no } localization_key = gamekeepers_regular @@ -856,6 +888,50 @@ GetGovernmentIcon = { } localization_key = adventurer_icon_concept } + text = { + trigger = { + trigger_if = { + limit = { + is_alive = no + } + has_government = nomad_government + } + trigger_else = { + trigger_if = { + limit = { + is_ruler = yes + } + government_has_flag = government_is_nomadic + } + trigger_else = { + liege ?= { government_has_flag = government_is_nomadic } + } + } + } + localization_key = nomadic_icon_concept + } + text = { + trigger = { + trigger_if = { + limit = { + is_alive = no + } + has_government = herder_government + } + trigger_else = { + trigger_if = { + limit = { + is_ruler = yes + } + has_government = herder_government + } + trigger_else = { + liege ?= { has_government = herder_government } + } + } + } + localization_key = herder_icon_concept + } text = { trigger = { trigger_if = { @@ -962,3 +1038,16 @@ GetGovernmentIcon = { fallback = yes } } + +GetTribalFeudal = { + type = character + + text = { + trigger = { government_has_flag = government_is_tribal } + localization_key = tribal_government + } + + text = { + localization_key = feudal_government + } +} diff --git a/common/customizable_localization/00_insult_custom_loc.txt b/common/customizable_localization/00_insult_custom_loc.txt index 5c2c13f2..14fed4cc 100644 --- a/common/customizable_localization/00_insult_custom_loc.txt +++ b/common/customizable_localization/00_insult_custom_loc.txt @@ -370,6 +370,17 @@ } } } + text = { + localization_key = shitling + trigger = { + OR = { + is_adult = no + has_nickname = nick_the_dung_named + } + # Don't wheel it out for children that don't really misbehave. + NOT = { has_trait = pensive } + } + } text = { localization_key = swine trigger = { diff --git a/common/customizable_localization/00_interactions_custom_loc.txt b/common/customizable_localization/00_interactions_custom_loc.txt index 5336ce15..282aba18 100644 --- a/common/customizable_localization/00_interactions_custom_loc.txt +++ b/common/customizable_localization/00_interactions_custom_loc.txt @@ -4,7 +4,7 @@ GetRevokeTitleName = { text = { localization_key = revoke_governorship_interaction trigger = { - government_allows = administrative + government_has_flag = government_is_administrative } } text = { diff --git a/common/customizable_localization/00_maa_custom_loc.txt b/common/customizable_localization/00_maa_custom_loc.txt index 1e506144..2da58606 100644 --- a/common/customizable_localization/00_maa_custom_loc.txt +++ b/common/customizable_localization/00_maa_custom_loc.txt @@ -14,6 +14,10 @@ GetRegionalArcherMAA = { trigger = { culture = { has_cultural_parameter = unlock_maa_metsanvartija } } localization_key = metsanvartija } + text = { + trigger = { culture = { has_cultural_parameter = unlock_maa_maturkan_warriors } } + localization_key = maturkan_warriors + } text = { trigger = { culture = { has_cultural_parameter = unlock_maa_longbowmen } } localization_key = longbowmen @@ -152,6 +156,14 @@ GetRegionalCavalryMAA = { trigger = { culture = { has_cultural_parameter = unlock_maa_conrois } } localization_key = conrois } + text = { + trigger = { culture = { has_cultural_parameter = unlock_maa_mangudai } } + localization_key = mangudai + } + text = { + trigger = { culture = { has_cultural_parameter = unlock_maa_cataphract_archers } } + localization_key = cataphract_archers + } text = { trigger = { always = no } fallback = yes diff --git a/common/customizable_localization/00_martial_lifestyle_custom_loc.txt b/common/customizable_localization/00_martial_lifestyle_custom_loc.txt index 1f599a73..753464f7 100644 --- a/common/customizable_localization/00_martial_lifestyle_custom_loc.txt +++ b/common/customizable_localization/00_martial_lifestyle_custom_loc.txt @@ -524,6 +524,78 @@ WarhorseStoryName = { } localization_key = warhorse_name_glitterhoof } + text = { + trigger = { + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + var:story_cycle_horse_name = flag:khiimori + } + } + localization_key = warhorse_name_khiimori + } + text = { + trigger = { + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + var:story_cycle_horse_name = flag:rlung_rta + } + } + localization_key = warhorse_name_rlung_rta + } + text = { + trigger = { + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + var:story_cycle_horse_name = flag:jonon_khar + } + } + localization_key = warhorse_name_jonon_khar + } + text = { + trigger = { + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + var:story_cycle_horse_name = flag:tulpar + } + } + localization_key = warhorse_name_tulpar + } + text = { + trigger = { + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + var:story_cycle_horse_name = flag:oyomaa + } + } + localization_key = warhorse_name_oyomaa + } + text = { + trigger = { + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + var:story_cycle_horse_name = flag:aranzhale + } + } + localization_key = warhorse_name_aranzhale + } + text = { + trigger = { + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + var:story_cycle_horse_name = flag:rakhsh + } + } + localization_key = warhorse_name_rakhsh + } + text = { + trigger = { + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + var:story_cycle_horse_name = flag:courser + } + } + localization_key = warhorse_name_courser + } } @@ -640,4 +712,4 @@ HorseStoryOppositeMareStallion = { fallback = yes localization_key = horse_gender_stallion } -} \ No newline at end of file +} diff --git a/common/customizable_localization/00_pet_custom_loc.txt b/common/customizable_localization/00_pet_custom_loc.txt index dcf3a52f..e00650ef 100644 --- a/common/customizable_localization/00_pet_custom_loc.txt +++ b/common/customizable_localization/00_pet_custom_loc.txt @@ -1392,4 +1392,355 @@ CatOrDogStoryName = { } localization_key = cat_name_spooky } +} + +EagleStoryHerHis = { + type = character + + text = { + trigger = { + exists = var:eagle_gender + var:eagle_gender = flag:female + } + localization_key = eagle_gender_her + } + text = { + trigger = { + exists = var:eagle_gender + var:eagle_gender = flag:male + } + localization_key = eagle_gender_his + } +} + +EagleStoryHerHim = { + type = character + + text = { + trigger = { + exists = var:eagle_gender + var:eagle_gender = flag:female + } + localization_key = eagle_gender_her + } + text = { + trigger = { + exists = var:eagle_gender + var:eagle_gender = flag:male + } + localization_key = eagle_gender_him + } +} + +EagleStoryGirlBoy = { + type = character + + text = { + trigger = { + exists = var:eagle_gender + var:eagle_gender = flag:female + } + localization_key = girl + } + text = { + trigger = { + exists = var:eagle_gender + var:eagle_gender = flag:male + } + localization_key = boy + } +} + +EagleStorySheHe = { + type = character + + text = { + trigger = { + exists = var:eagle_gender + var:eagle_gender = flag:female + } + localization_key = eagle_gender_she + } + text = { + trigger = { + exists = var:eagle_gender + var:eagle_gender = flag:male + } + localization_key = eagle_gender_he + } +} + +#For eagle story +EagleStoryName = { + type = character + + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:custom + } + localization_key = eagle_name + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_lyra + } + localization_key = eagle_name_lyra + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_jargal + } + localization_key = eagle_name_jargal + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_khair + } + localization_key = eagle_name_khair + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_anda + } + localization_key = eagle_name_anda + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_timur + } + localization_key = eagle_name_timur + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_torebek + } + localization_key = eagle_name_torebek + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_elmek + } + localization_key = eagle_name_elmek + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_khongor + } + localization_key = eagle_name_khongor + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_chania + } + localization_key = eagle_name_chania + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_qyliinshaq + } + localization_key = eagle_name_qyliinshaq + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_janym + } + localization_key = eagle_name_janym + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_syr + } + localization_key = eagle_name_syr + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_astana + } + localization_key = eagle_name_astana + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_halik + } + localization_key = eagle_name_halik + } + text = { + trigger = { + exists = var:story_cycle_eagle_name + var:story_cycle_eagle_name = flag:eagle_name_zephyr + } + localization_key = eagle_name_zephyr + } +} + +EagleStoryNamePossessive = { + type = character + + text = { + localization_key = eagle_name_possessive + } +} + +EaglePersonalityTrait1 = { + type = character + random_valid = yes + + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:brave + } + localization_key = eagle_personality_trait_brave + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:brave + } + localization_key = eagle_personality_trait_brave_2 + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:curious + } + localization_key = eagle_personality_trait_curious + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:curious + } + localization_key = eagle_personality_trait_curious_2 + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:loyal + } + localization_key = eagle_personality_trait_loyal + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:loyal + } + localization_key = eagle_personality_trait_loyal_2 + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:calm + } + localization_key = eagle_personality_trait_calm + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:calm + } + localization_key = eagle_personality_trait_calm_2 + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:wise + } + localization_key = eagle_personality_trait_wise + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:wise + } + localization_key = eagle_personality_trait_wise_2 + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:cunning + } + localization_key = eagle_personality_trait_cunning + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:cunning + } + localization_key = eagle_personality_trait_cunning_2 + } + text = { + localization_key = eagle_personality_trait_none + } + text = { + localization_key = eagle_personality_trait_none_2 + } + text = { + localization_key = eagle_personality_trait_none_3 + } +} + +EaglePersonalityTraitTooltip = { + type = character + + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:brave + } + localization_key = eagle_personality_trait_brave_3 + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:curious + } + localization_key = eagle_personality_trait_curious_3 + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:loyal + } + localization_key = eagle_personality_trait_loyal_3 + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:calm + } + localization_key = eagle_personality_trait_calm_3 + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:wise + } + localization_key = eagle_personality_trait_wise_3 + } + text = { + trigger = { + exists = var:eagle_personality_trait + var:eagle_personality_trait = flag:cunning + } + localization_key = eagle_personality_trait_cunning_3 + } + text = { + localization_key = eagle_personality_trait_none_4 + } } \ No newline at end of file diff --git a/common/customizable_localization/00_pl_custom_loc_extra.txt b/common/customizable_localization/00_pl_custom_loc_extra.txt index f3e28cfb..c1be71ff 100644 --- a/common/customizable_localization/00_pl_custom_loc_extra.txt +++ b/common/customizable_localization/00_pl_custom_loc_extra.txt @@ -995,51 +995,6 @@ RarityAdjToArtifactType = { } -# v1.5 -RarityAdjType = { - log_loc_errors = no - type = artifact - - text = { - trigger = { rarity = masterwork } - localization_key = masterwork - } - - text = { - trigger = { rarity = famed } - localization_key = famed - } - - text = { - trigger = { rarity = illustrious } - localization_key = illustrious - } - - text = { - trigger = { rarity = legendary } - localization_key = legendary - } - - text = { - trigger = { rarity = rare } - localization_key = rare - } - -} - -# v1.5 -RarityAdjType1 = { - parent = RarityAdjType - suffix = "_type_1" -} - -# v1.5 -RarityAdjType2 = { - parent = RarityAdjType - suffix = "_type_2" -} - - PL_ActivityStringBypass = { log_loc_errors = no type = activity diff --git a/common/customizable_localization/00_regional_custom_localization.txt b/common/customizable_localization/00_regional_custom_localization.txt index ce664228..f30b7d7d 100644 --- a/common/customizable_localization/00_regional_custom_localization.txt +++ b/common/customizable_localization/00_regional_custom_localization.txt @@ -129,6 +129,20 @@ FortifiedBuilding = { #Castle, Fort, Kasbah etc. ResidenceBuilding = { #Castle, Palace, etc. type = character + text = { + trigger = { + government_has_flag = government_is_nomadic + } + localization_key = yurt_residence + } + + text = { + trigger = { + government_has_flag = government_is_tribal + } + localization_key = hall_residence + } + text = { trigger = { government_has_flag = government_is_landless_adventurer @@ -184,6 +198,20 @@ ResidenceBuilding = { #Castle, Palace, etc. ResidenceBuildingPlural = { #Castles, Palaces, etc. type = character + text = { + trigger = { + government_has_flag = government_is_nomadic + } + localization_key = yurt_residence_plural + } + + text = { + trigger = { + government_has_flag = government_is_tribal + } + localization_key = hall_residence_plural + } + text = { trigger = { government_has_flag = government_is_landless_adventurer @@ -3511,3 +3539,165 @@ GetKnightErrantAnimal = { } } +RegionalWeaponMetal = { + type = character + + text = { + trigger = { + location = { + OR = { + geographical_region = world_india_deccan + geographical_region = world_india_bengal + geographical_region = world_india_rajastan + geographical_region = world_burma + } + } + } + localization_key = metal_wootz_steel + } + text = { + trigger = { + location = { + OR = { + geographical_region = world_middle_east + geographical_region = world_asia_minor + geographical_region = world_africa_north_east + } + } + } + localization_key = metal_damascus_steel + } + text = { + trigger = { + location = { + OR = { + geographical_region = world_europe_east + geographical_region = world_steppe_tarim + geographical_region = world_steppe_west + geographical_region = world_steppe_central + geographical_region = world_steppe_east + geographical_region = world_siberia + } + } + } + localization_key = metal_bulat_steel + } + text = { + trigger = { + NOR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + } + localization_key = metal_steel + } + + text = { + localization_key = metal_iron + fallback = yes + } +} + +RegionalFabric = { + type = character + random_valid = yes + + text = { + trigger = { + location = { + OR = { + geographical_region = world_europe_west + geographical_region = world_europe_north + geographical_region = world_europe_south + geographical_region = world_europe_east + } + } + } + localization_key = cloth_linen + } + text = { + trigger = { + location = { + OR = { + geographical_region = world_africa_north_east + geographical_region = world_africa_east + } + } + } + localization_key = cloth_cotton + } + text = { + trigger = { + location = { + NOR = { + geographical_region = world_africa_west + geographical_region = world_africa_east + } + } + } + localization_key = cloth_silk + } + text = { + trigger = { + location = { + NOR = { + geographical_region = world_africa_west + geographical_region = world_africa_east + } + } + } + localization_key = cloth_satin + } + text = { + trigger = { + location = { + NOR = { + geographical_region = world_africa_west + geographical_region = world_africa_east + } + } + } + localization_key = cloth_velvet + } + text = { + trigger = { + location = { + NOR = { + geographical_region = world_africa_west + geographical_region = world_africa_east + } + } + } + localization_key = cloth_samite + } + text = { + trigger = { + location = { + OR = { + geographical_region = world_europe_west + geographical_region = world_europe_north + geographical_region = world_europe_south + geographical_region = world_europe_east + } + } + NOT = { + religion = religion:judaism_religion + } + } + localization_key = cloth_fustian + } + text = { + trigger = { + location = { + geographical_region = world_europe_west_britannia + } + current_date >= 1200.1.1 + } + localization_key = cloth_worsted_wool + } + + text = { + localization_key = cloth_wool + fallback = yes + } +} diff --git a/common/customizable_localization/00_relations.txt b/common/customizable_localization/00_relations.txt index 1a981f96..869b8b5d 100644 --- a/common/customizable_localization/00_relations.txt +++ b/common/customizable_localization/00_relations.txt @@ -1604,8 +1604,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = court_physician_court_position + is_court_position_employer = { + court_position = court_physician_court_position + who = root + } } - employs_court_position = court_physician_court_position } } @@ -1615,8 +1618,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = court_physician_court_position + is_court_position_employer = { + court_position = court_physician_court_position + who = root + } } - employs_court_position = court_physician_court_position } } @@ -1626,8 +1632,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = keeper_of_swans_court_position + is_court_position_employer = { + court_position = keeper_of_swans_court_position + who = root + } } - employs_court_position = keeper_of_swans_court_position } } @@ -1637,8 +1646,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = keeper_of_swans_court_position + is_court_position_employer = { + court_position = keeper_of_swans_court_position + who = root + } } - employs_court_position = keeper_of_swans_court_position } } @@ -1648,8 +1660,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = travel_leader_court_position + is_court_position_employer = { + court_position = travel_leader_court_position + who = root + } } - employs_court_position = travel_leader_court_position } } @@ -1659,8 +1674,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = travel_leader_court_position + is_court_position_employer = { + court_position = travel_leader_court_position + who = root + } } - employs_court_position = travel_leader_court_position } } @@ -1670,8 +1688,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = master_of_horse_court_position + is_court_position_employer = { + court_position = master_of_horse_court_position + who = root + } } - employs_court_position = master_of_horse_court_position } } @@ -1681,8 +1702,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = master_of_horse_court_position + is_court_position_employer = { + court_position = master_of_horse_court_position + who = root + } } - employs_court_position = master_of_horse_court_position } } @@ -1692,8 +1716,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = court_jester_court_position + is_court_position_employer = { + court_position = court_jester_court_position + who = root + } } - employs_court_position = court_jester_court_position } } @@ -1703,8 +1730,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = court_jester_court_position + is_court_position_employer = { + court_position = court_jester_court_position + who = root + } } - employs_court_position = court_jester_court_position } } @@ -1714,8 +1744,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = master_of_hunt_court_position + is_court_position_employer = { + court_position = master_of_hunt_court_position + who = root + } } - employs_court_position = master_of_hunt_court_position } } @@ -1725,8 +1758,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = master_of_hunt_court_position + is_court_position_employer = { + court_position = master_of_hunt_court_position + who = root + } } - employs_court_position = master_of_hunt_court_position } } @@ -1736,8 +1772,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = high_almoner_court_position + is_court_position_employer = { + court_position = high_almoner_court_position + who = root + } } - employs_court_position = high_almoner_court_position } } @@ -1747,8 +1786,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = high_almoner_court_position + is_court_position_employer = { + court_position = high_almoner_court_position + who = root + } } - employs_court_position = high_almoner_court_position } } @@ -1758,8 +1800,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = cupbearer_court_position + is_court_position_employer = { + court_position = cupbearer_court_position + who = root + } } - employs_court_position = cupbearer_court_position } } @@ -1769,8 +1814,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = cupbearer_court_position + is_court_position_employer = { + court_position = cupbearer_court_position + who = root + } } - employs_court_position = cupbearer_court_position } } @@ -1780,8 +1828,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = seneschal_court_position + is_court_position_employer = { + court_position = seneschal_court_position + who = root + } } - employs_court_position = seneschal_court_position } } @@ -1791,8 +1842,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = seneschal_court_position + is_court_position_employer = { + court_position = seneschal_court_position + who = root + } } - employs_court_position = seneschal_court_position } } @@ -1802,8 +1856,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = antiquarian_court_position + is_court_position_employer = { + court_position = antiquarian_court_position + who = root + } } - employs_court_position = antiquarian_court_position } } @@ -1813,8 +1870,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = antiquarian_court_position + is_court_position_employer = { + court_position = antiquarian_court_position + who = root + } } - employs_court_position = antiquarian_court_position } } @@ -1824,8 +1884,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = court_tutor_court_position + is_court_position_employer = { + court_position = court_tutor_court_position + who = root + } } - employs_court_position = court_tutor_court_position } } @@ -1835,8 +1898,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = court_tutor_court_position + is_court_position_employer = { + court_position = court_tutor_court_position + who = root + } } - employs_court_position = court_tutor_court_position } } @@ -1846,8 +1912,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = royal_architect_court_position + is_court_position_employer = { + court_position = royal_architect_court_position + who = root + } } - employs_court_position = royal_architect_court_position } } @@ -1857,8 +1926,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = royal_architect_court_position + is_court_position_employer = { + court_position = royal_architect_court_position + who = root + } } - employs_court_position = royal_architect_court_position } } @@ -1868,8 +1940,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = court_poet_court_position + is_court_position_employer = { + court_position = court_poet_court_position + who = root + } } - employs_court_position = court_poet_court_position } } @@ -1879,8 +1954,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = court_poet_court_position + is_court_position_employer = { + court_position = court_poet_court_position + who = root + } } - employs_court_position = court_poet_court_position } } @@ -1890,8 +1968,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = bodyguard_court_position + is_court_position_employer = { + court_position = bodyguard_court_position + who = root + } } - employs_court_position = bodyguard_court_position } } @@ -1901,8 +1982,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = bodyguard_court_position + is_court_position_employer = { + court_position = bodyguard_court_position + who = root + } } - employs_court_position = bodyguard_court_position } } @@ -1912,8 +1996,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = champion_court_position + is_court_position_employer = { + court_position = champion_court_position + who = root + } } - employs_court_position = champion_court_position } } @@ -1923,8 +2010,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = champion_court_position + is_court_position_employer = { + court_position = champion_court_position + who = root + } } - employs_court_position = champion_court_position } } @@ -1934,8 +2024,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = court_musician_court_position + is_court_position_employer = { + court_position = court_musician_court_position + who = root + } } - employs_court_position = court_musician_court_position } } @@ -1945,8 +2038,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = court_musician_court_position + is_court_position_employer = { + court_position = court_musician_court_position + who = root + } } - employs_court_position = court_musician_court_position } } @@ -1956,8 +2052,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = food_taster_court_position + is_court_position_employer = { + court_position = food_taster_court_position + who = root + } } - employs_court_position = food_taster_court_position } } @@ -1967,8 +2066,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = food_taster_court_position + is_court_position_employer = { + court_position = food_taster_court_position + who = root + } } - employs_court_position = food_taster_court_position } } @@ -1978,8 +2080,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = lady_in_waiting_court_position + is_court_position_employer = { + court_position = lady_in_waiting_court_position + who = root + } } - employs_court_position = lady_in_waiting_court_position } } @@ -1989,8 +2094,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = lady_in_waiting_court_position + is_court_position_employer = { + court_position = lady_in_waiting_court_position + who = root + } } - employs_court_position = lady_in_waiting_court_position } } @@ -2000,8 +2108,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = garuda_court_position + is_court_position_employer = { + court_position = garuda_court_position + who = root + } } - employs_court_position = garuda_court_position } } @@ -2011,8 +2122,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = garuda_court_position + is_court_position_employer = { + court_position = garuda_court_position + who = root + } } - employs_court_position = garuda_court_position } } @@ -2022,8 +2136,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = chief_eunuch_court_position + is_court_position_employer = { + court_position = chief_eunuch_court_position + who = root + } } - employs_court_position = chief_eunuch_court_position } } @@ -2033,8 +2150,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = chief_eunuch_court_position + is_court_position_employer = { + court_position = chief_eunuch_court_position + who = root + } } - employs_court_position = chief_eunuch_court_position } } @@ -2044,8 +2164,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = court_gardener_court_position + is_court_position_employer = { + court_position = court_gardener_court_position + who = root + } } - employs_court_position = court_gardener_court_position } } @@ -2055,8 +2178,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = court_gardener_court_position + is_court_position_employer = { + court_position = court_gardener_court_position + who = root + } } - employs_court_position = court_gardener_court_position } } @@ -2066,8 +2192,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = chief_qadi_court_position + is_court_position_employer = { + court_position = chief_qadi_court_position + who = root + } } - employs_court_position = chief_qadi_court_position } } @@ -2077,8 +2206,11 @@ RelationToMe = { scope:second = { is_male = yes has_court_position = chief_qadi_court_position + is_court_position_employer = { + court_position = chief_qadi_court_position + who = root + } } - employs_court_position = chief_qadi_court_position } } @@ -2088,8 +2220,11 @@ RelationToMe = { scope:second = { is_female = yes has_court_position = wet_nurse_court_position + is_court_position_employer = { + court_position = wet_nurse_court_position + who = root + } } - employs_court_position = wet_nurse_court_position } } @@ -2117,14 +2252,41 @@ RelationToMe = { } } + text = { + localization_key = relation_court_astrologer_male + trigger = { + scope:second = { is_male = yes } + has_court_position = court_astrologer_court_position + is_court_position_employer = { + court_position = court_astrologer_court_position + who = root + } + } + } + + text = { + localization_key = relation_court_astrologer_female + trigger = { + scope:second = { is_female = yes } + has_court_position = court_astrologer_court_position + is_court_position_employer = { + court_position = court_astrologer_court_position + who = root + } + } + } + text = { #Shouldn't happen, but who knows ¯\_(ツ)_/¯ localization_key = relation_wet_nurse_male trigger = { scope:second = { is_male = yes has_court_position = wet_nurse_court_position + is_court_position_employer = { + court_position = wet_nurse_court_position + who = root + } } - employs_court_position = wet_nurse_court_position } } @@ -4300,8 +4462,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = court_physician_court_position + is_court_position_employer = { + court_position = court_physician_court_position + who = root + } } - employs_court_position = court_physician_court_position } } @@ -4311,8 +4476,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = court_physician_court_position + is_court_position_employer = { + court_position = court_physician_court_position + who = root + } } - employs_court_position = court_physician_court_position } } @@ -4322,8 +4490,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = keeper_of_swans_court_position + is_court_position_employer = { + court_position = keeper_of_swans_court_position + who = root + } } - employs_court_position = keeper_of_swans_court_position } } @@ -4333,8 +4504,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = keeper_of_swans_court_position + is_court_position_employer = { + court_position = keeper_of_swans_court_position + who = root + } } - employs_court_position = keeper_of_swans_court_position } } @@ -4344,8 +4518,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = travel_leader_court_position + is_court_position_employer = { + court_position = travel_leader_court_position + who = root + } } - employs_court_position = travel_leader_court_position } } @@ -4355,8 +4532,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = travel_leader_court_position + is_court_position_employer = { + court_position = travel_leader_court_position + who = root + } } - employs_court_position = travel_leader_court_position } } @@ -4366,8 +4546,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = master_of_horse_court_position + is_court_position_employer = { + court_position = master_of_horse_court_position + who = root + } } - employs_court_position = master_of_horse_court_position } } @@ -4377,8 +4560,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = master_of_horse_court_position + is_court_position_employer = { + court_position = master_of_horse_court_position + who = root + } } - employs_court_position = master_of_horse_court_position } } @@ -4388,8 +4574,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = court_jester_court_position + is_court_position_employer = { + court_position = court_jester_court_position + who = root + } } - employs_court_position = court_jester_court_position } } @@ -4399,8 +4588,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = court_jester_court_position + is_court_position_employer = { + court_position = court_jester_court_position + who = root + } } - employs_court_position = court_jester_court_position } } @@ -4410,8 +4602,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = master_of_hunt_court_position + is_court_position_employer = { + court_position = master_of_hunt_court_position + who = root + } } - employs_court_position = master_of_hunt_court_position } } @@ -4421,8 +4616,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = master_of_hunt_court_position + is_court_position_employer = { + court_position = master_of_hunt_court_position + who = root + } } - employs_court_position = master_of_hunt_court_position } } @@ -4432,8 +4630,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = high_almoner_court_position + is_court_position_employer = { + court_position = high_almoner_court_position + who = root + } } - employs_court_position = high_almoner_court_position } } @@ -4443,8 +4644,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = high_almoner_court_position + is_court_position_employer = { + court_position = high_almoner_court_position + who = root + } } - employs_court_position = high_almoner_court_position } } @@ -4454,8 +4658,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = cupbearer_court_position + is_court_position_employer = { + court_position = cupbearer_court_position + who = root + } } - employs_court_position = cupbearer_court_position } } @@ -4465,8 +4672,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = cupbearer_court_position + is_court_position_employer = { + court_position = cupbearer_court_position + who = root + } } - employs_court_position = cupbearer_court_position } } @@ -4476,8 +4686,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = seneschal_court_position + is_court_position_employer = { + court_position = seneschal_court_position + who = root + } } - employs_court_position = seneschal_court_position } } @@ -4487,8 +4700,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = seneschal_court_position + is_court_position_employer = { + court_position = seneschal_court_position + who = root + } } - employs_court_position = seneschal_court_position } } @@ -4498,8 +4714,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = antiquarian_court_position + is_court_position_employer = { + court_position = antiquarian_court_position + who = root + } } - employs_court_position = antiquarian_court_position } } @@ -4509,8 +4728,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = antiquarian_court_position + is_court_position_employer = { + court_position = antiquarian_court_position + who = root + } } - employs_court_position = antiquarian_court_position } } @@ -4520,8 +4742,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = court_tutor_court_position + is_court_position_employer = { + court_position = court_tutor_court_position + who = root + } } - employs_court_position = court_tutor_court_position } } @@ -4531,8 +4756,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = court_tutor_court_position + is_court_position_employer = { + court_position = court_tutor_court_position + who = root + } } - employs_court_position = court_tutor_court_position } } @@ -4542,8 +4770,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = royal_architect_court_position + is_court_position_employer = { + court_position = royal_architect_court_position + who = root + } } - employs_court_position = royal_architect_court_position } } @@ -4553,8 +4784,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = royal_architect_court_position + is_court_position_employer = { + court_position = royal_architect_court_position + who = root + } } - employs_court_position = royal_architect_court_position } } @@ -4564,8 +4798,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = court_poet_court_position + is_court_position_employer = { + court_position = court_poet_court_position + who = root + } } - employs_court_position = court_poet_court_position } } @@ -4575,8 +4812,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = court_poet_court_position + is_court_position_employer = { + court_position = court_poet_court_position + who = root + } } - employs_court_position = court_poet_court_position } } @@ -4586,8 +4826,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = bodyguard_court_position + is_court_position_employer = { + court_position = bodyguard_court_position + who = root + } } - employs_court_position = bodyguard_court_position } } @@ -4597,8 +4840,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = bodyguard_court_position + is_court_position_employer = { + court_position = bodyguard_court_position + who = root + } } - employs_court_position = bodyguard_court_position } } @@ -4608,8 +4854,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = champion_court_position + is_court_position_employer = { + court_position = champion_court_position + who = root + } } - employs_court_position = champion_court_position } } @@ -4619,8 +4868,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = champion_court_position + is_court_position_employer = { + court_position = champion_court_position + who = root + } } - employs_court_position = champion_court_position } } @@ -4630,8 +4882,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = court_musician_court_position + is_court_position_employer = { + court_position = court_musician_court_position + who = root + } } - employs_court_position = court_musician_court_position } } @@ -4641,8 +4896,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = court_musician_court_position + is_court_position_employer = { + court_position = court_musician_court_position + who = root + } } - employs_court_position = court_musician_court_position } } @@ -4652,8 +4910,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = food_taster_court_position + is_court_position_employer = { + court_position = food_taster_court_position + who = root + } } - employs_court_position = food_taster_court_position } } @@ -4663,8 +4924,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = food_taster_court_position + is_court_position_employer = { + court_position = food_taster_court_position + who = root + } } - employs_court_position = food_taster_court_position } } @@ -4674,8 +4938,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = lady_in_waiting_court_position + is_court_position_employer = { + court_position = lady_in_waiting_court_position + who = root + } } - employs_court_position = lady_in_waiting_court_position } } @@ -4685,8 +4952,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = lady_in_waiting_court_position + is_court_position_employer = { + court_position = lady_in_waiting_court_position + who = root + } } - employs_court_position = lady_in_waiting_court_position } } @@ -4696,8 +4966,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = garuda_court_position + is_court_position_employer = { + court_position = garuda_court_position + who = root + } } - employs_court_position = garuda_court_position } } @@ -4707,8 +4980,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = garuda_court_position + is_court_position_employer = { + court_position = garuda_court_position + who = root + } } - employs_court_position = garuda_court_position } } @@ -4718,8 +4994,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = chief_eunuch_court_position + is_court_position_employer = { + court_position = chief_eunuch_court_position + who = root + } } - employs_court_position = chief_eunuch_court_position } } @@ -4729,8 +5008,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = chief_eunuch_court_position + is_court_position_employer = { + court_position = chief_eunuch_court_position + who = root + } } - employs_court_position = chief_eunuch_court_position } } @@ -4740,8 +5022,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = court_gardener_court_position + is_court_position_employer = { + court_position = court_gardener_court_position + who = root + } } - employs_court_position = court_gardener_court_position } } @@ -4751,8 +5036,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = court_gardener_court_position + is_court_position_employer = { + court_position = court_gardener_court_position + who = root + } } - employs_court_position = court_gardener_court_position } } @@ -4762,8 +5050,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = chief_qadi_court_position + is_court_position_employer = { + court_position = chief_qadi_court_position + who = root + } } - employs_court_position = chief_qadi_court_position } } @@ -4773,8 +5064,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = chief_qadi_court_position + is_court_position_employer = { + court_position = chief_qadi_court_position + who = root + } } - employs_court_position = chief_qadi_court_position } } @@ -4784,8 +5078,11 @@ RelationToMePossessive = { scope:second = { is_female = yes has_court_position = wet_nurse_court_position + is_court_position_employer = { + court_position = wet_nurse_court_position + who = root + } } - employs_court_position = wet_nurse_court_position } } @@ -4795,8 +5092,11 @@ RelationToMePossessive = { scope:second = { is_male = yes has_court_position = wet_nurse_court_position + is_court_position_employer = { + court_position = wet_nurse_court_position + who = root + } } - employs_court_position = wet_nurse_court_position } } @@ -4823,6 +5123,30 @@ RelationToMePossessive = { } } } + + text = { + localization_key = relation_court_astrologer_male_possessive + trigger = { + scope:second = { is_male = yes } + has_court_position = court_astrologer_court_position + is_court_position_employer = { + court_position = court_astrologer_court_position + who = root + } + } + } + + text = { + localization_key = relation_court_astrologer_female_possessive + trigger = { + scope:second = { is_female = yes } + has_court_position = court_astrologer_court_position + is_court_position_employer = { + court_position = court_astrologer_court_position + who = root + } + } + } text = { localization_key = relation_kinswoman_possessive @@ -6024,6 +6348,15 @@ RelationToMeShort = { } } + text = { + localization_key = relation_foe + trigger = { + scope:second = { + is_at_war_with = root + } + } + } + text = { #intrigue-mentor localization_key = relation_mentor trigger = { @@ -6356,11 +6689,11 @@ RelationToMeShort = { culture = culture:greek scope:second = { is_female = yes - government_allows = administrative + government_has_flag = government_is_administrative } any_vassal_or_below = { this = scope:second - government_allows = administrative + government_has_flag = government_is_administrative } } } @@ -6372,11 +6705,11 @@ RelationToMeShort = { culture = culture:greek scope:second = { is_female = no - government_allows = administrative + government_has_flag = government_is_administrative } any_vassal_or_below = { this = scope:second - government_allows = administrative + government_has_flag = government_is_administrative } } } @@ -6455,8 +6788,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = court_physician_court_position + is_court_position_employer = { + court_position = court_physician_court_position + who = root + } } - employs_court_position = court_physician_court_position } } @@ -6466,8 +6802,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = court_physician_court_position + is_court_position_employer = { + court_position = court_physician_court_position + who = root + } } - employs_court_position = court_physician_court_position } } @@ -6477,8 +6816,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = keeper_of_swans_court_position + is_court_position_employer = { + court_position = keeper_of_swans_court_position + who = root + } } - employs_court_position = keeper_of_swans_court_position } } @@ -6488,8 +6830,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = keeper_of_swans_court_position + is_court_position_employer = { + court_position = keeper_of_swans_court_position + who = root + } } - employs_court_position = keeper_of_swans_court_position } } @@ -6499,8 +6844,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = travel_leader_court_position + is_court_position_employer = { + court_position = travel_leader_court_position + who = root + } } - employs_court_position = travel_leader_court_position } } @@ -6510,8 +6858,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = travel_leader_court_position + is_court_position_employer = { + court_position = travel_leader_court_position + who = root + } } - employs_court_position = travel_leader_court_position } } @@ -6521,8 +6872,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = master_of_horse_court_position + is_court_position_employer = { + court_position = master_of_horse_court_position + who = root + } } - employs_court_position = master_of_horse_court_position } } @@ -6532,8 +6886,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = master_of_horse_court_position + is_court_position_employer = { + court_position = master_of_horse_court_position + who = root + } } - employs_court_position = master_of_horse_court_position } } @@ -6543,8 +6900,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = court_jester_court_position + is_court_position_employer = { + court_position = court_jester_court_position + who = root + } } - employs_court_position = court_jester_court_position } } @@ -6554,8 +6914,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = court_jester_court_position + is_court_position_employer = { + court_position = court_jester_court_position + who = root + } } - employs_court_position = court_jester_court_position } } @@ -6565,8 +6928,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = master_of_hunt_court_position + is_court_position_employer = { + court_position = master_of_hunt_court_position + who = root + } } - employs_court_position = master_of_hunt_court_position } } @@ -6576,8 +6942,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = master_of_hunt_court_position + is_court_position_employer = { + court_position = master_of_hunt_court_position + who = root + } } - employs_court_position = master_of_hunt_court_position } } @@ -6587,8 +6956,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = high_almoner_court_position + is_court_position_employer = { + court_position = high_almoner_court_position + who = root + } } - employs_court_position = high_almoner_court_position } } @@ -6598,8 +6970,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = high_almoner_court_position + is_court_position_employer = { + court_position = high_almoner_court_position + who = root + } } - employs_court_position = high_almoner_court_position } } @@ -6609,8 +6984,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = cupbearer_court_position + is_court_position_employer = { + court_position = cupbearer_court_position + who = root + } } - employs_court_position = cupbearer_court_position } } @@ -6620,8 +6998,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = cupbearer_court_position + is_court_position_employer = { + court_position = cupbearer_court_position + who = root + } } - employs_court_position = cupbearer_court_position } } @@ -6631,8 +7012,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = seneschal_court_position + is_court_position_employer = { + court_position = seneschal_court_position + who = root + } } - employs_court_position = seneschal_court_position } } @@ -6642,8 +7026,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = seneschal_court_position + is_court_position_employer = { + court_position = seneschal_court_position + who = root + } } - employs_court_position = seneschal_court_position } } @@ -6653,8 +7040,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = antiquarian_court_position + is_court_position_employer = { + court_position = antiquarian_court_position + who = root + } } - employs_court_position = antiquarian_court_position } } @@ -6664,8 +7054,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = antiquarian_court_position + is_court_position_employer = { + court_position = antiquarian_court_position + who = root + } } - employs_court_position = antiquarian_court_position } } @@ -6675,8 +7068,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = court_tutor_court_position + is_court_position_employer = { + court_position = court_tutor_court_position + who = root + } } - employs_court_position = court_tutor_court_position } } @@ -6686,8 +7082,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = court_tutor_court_position + is_court_position_employer = { + court_position = court_tutor_court_position + who = root + } } - employs_court_position = court_tutor_court_position } } @@ -6697,8 +7096,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = royal_architect_court_position + is_court_position_employer = { + court_position = royal_architect_court_position + who = root + } } - employs_court_position = royal_architect_court_position } } @@ -6708,8 +7110,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = royal_architect_court_position + is_court_position_employer = { + court_position = royal_architect_court_position + who = root + } } - employs_court_position = royal_architect_court_position } } @@ -6719,8 +7124,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = court_poet_court_position + is_court_position_employer = { + court_position = court_poet_court_position + who = root + } } - employs_court_position = court_poet_court_position } } @@ -6730,8 +7138,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = court_poet_court_position + is_court_position_employer = { + court_position = court_poet_court_position + who = root + } } - employs_court_position = court_poet_court_position } } @@ -6741,8 +7152,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = bodyguard_court_position + is_court_position_employer = { + court_position = bodyguard_court_position + who = root + } } - employs_court_position = bodyguard_court_position } } @@ -6752,8 +7166,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = bodyguard_court_position + is_court_position_employer = { + court_position = bodyguard_court_position + who = root + } } - employs_court_position = bodyguard_court_position } } @@ -6763,8 +7180,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = champion_court_position + is_court_position_employer = { + court_position = champion_court_position + who = root + } } - employs_court_position = champion_court_position } } @@ -6774,8 +7194,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = champion_court_position + is_court_position_employer = { + court_position = champion_court_position + who = root + } } - employs_court_position = champion_court_position } } @@ -6785,8 +7208,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = court_musician_court_position + is_court_position_employer = { + court_position = court_musician_court_position + who = root + } } - employs_court_position = court_musician_court_position } } @@ -6796,8 +7222,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = court_musician_court_position + is_court_position_employer = { + court_position = court_musician_court_position + who = root + } } - employs_court_position = court_musician_court_position } } @@ -6807,8 +7236,11 @@ RelationToMeShort = { scope:second = { is_female = yes has_court_position = food_taster_court_position + is_court_position_employer = { + court_position = food_taster_court_position + who = root + } } - employs_court_position = food_taster_court_position } } @@ -6818,8 +7250,11 @@ RelationToMeShort = { scope:second = { is_male = yes has_court_position = food_taster_court_position + is_court_position_employer = { + court_position = food_taster_court_position + who = root + } } - employs_court_position = food_taster_court_position } } @@ -6846,6 +7281,30 @@ RelationToMeShort = { } } } + + text = { + localization_key = relation_court_astrologer_male + trigger = { + scope:second = { is_male = yes } + has_court_position = court_astrologer_court_position + is_court_position_employer = { + court_position = court_astrologer_court_position + who = root + } + } + } + + text = { + localization_key = relation_court_astrologer_female + trigger = { + scope:second = { is_female = yes } + has_court_position = court_astrologer_court_position + is_court_position_employer = { + court_position = court_astrologer_court_position + who = root + } + } + } text = { localization_key = relation_knight @@ -6854,6 +7313,15 @@ RelationToMeShort = { } } + text = { + localization_key = relation_ally + trigger = { + scope:second = { + is_allied_to = root + } + } + } + text = { localization_key = relation_kinswoman trigger = { diff --git a/common/customizable_localization/00_rich_presence_flavor_status.txt b/common/customizable_localization/00_rich_presence_flavor_status.txt index 5af4232c..9805eff5 100644 --- a/common/customizable_localization/00_rich_presence_flavor_status.txt +++ b/common/customizable_localization/00_rich_presence_flavor_status.txt @@ -8,6 +8,17 @@ localization_key = rich_presence_barbershop } + text = { # Conquering the world + trigger = { + OR = { + has_trait = greatest_of_khans + has_title = title:e_mongol_empire + realm_size >= 1000 + } + } + localization_key = rich_presence_world_conquest + } + text = { # Ergotism trigger = { has_trait = ergotism @@ -531,9 +542,9 @@ text = { # Admin Government - Scheming trigger = { is_independent_ruler = no - government_allows = administrative + government_has_flag = government_is_administrative highest_held_title_tier >= tier_duchy - liege = { government_allows = administrative } + liege = { government_has_flag = government_is_administrative } any_scheme = { intrigue_scheme_trigger = yes } @@ -544,13 +555,21 @@ text = { # Admin Government trigger = { is_independent_ruler = no - government_allows = administrative + government_has_flag = government_is_administrative highest_held_title_tier >= tier_duchy - liege = { government_allows = administrative } + liege = { government_has_flag = government_is_administrative } } localization_key = rich_presence_admin } + text = { # Nomad Government + trigger = { + government_has_flag = government_is_nomadic + exists = domicile + } + localization_key = rich_presence_nomad + } + text = { # Landless Ruler - Camping trigger = { has_government = landless_adventurer_government diff --git a/common/customizable_localization/00_suitable_title_custom_loc.txt b/common/customizable_localization/00_suitable_title_custom_loc.txt index 312be72e..1d769cea 100644 --- a/common/customizable_localization/00_suitable_title_custom_loc.txt +++ b/common/customizable_localization/00_suitable_title_custom_loc.txt @@ -96,6 +96,23 @@ } } +get_queen_king = { + type = character + text = { + localization_key = queen_lower_case + trigger = { + is_female = yes + } + } + + text = { + localization_key = king_lower_case + trigger = { + is_male = yes + } + } +} + RealmType = { type = character diff --git a/common/customizable_localization/00_travel.txt b/common/customizable_localization/00_travel.txt index 755c8716..33bb0fb5 100644 --- a/common/customizable_localization/00_travel.txt +++ b/common/customizable_localization/00_travel.txt @@ -1564,6 +1564,7 @@ trigger = { has_special_building = yes has_building_or_higher = palace_of_ctesiphon_01 + NOT = { has_building_or_higher = palace_of_ctesiphon_02 } #this = province:4796 # An-Nahrawan } localization_key = building_palace_of_ctesiphon_destination_desc @@ -1877,6 +1878,218 @@ localization_key = building_cilician_gates_destination_desc } + #CCP3 + text = { # drassanes_01 + trigger = { + has_special_building = yes + has_building_or_higher = drassanes_01 + } + localization_key = building_drassanes_01_destination_desc + } + + text = { # kyz_kala_01 + trigger = { + has_special_building = yes + has_building_or_higher = kyz_kala_01 + } + localization_key = building_kyz_kala_01_destination_desc + } + + text = { # cluny_abbey_01 + trigger = { + has_special_building = yes + has_building_or_higher = cluny_abbey_01 + NOT = { has_building_or_higher = cluny_abbey_02 } + } + localization_key = building_cluny_abbey_01_destination_desc + } + + text = { # cluny_abbey_02 + trigger = { + has_special_building = yes + has_building_or_higher = cluny_abbey_02 + } + localization_key = building_cluny_abbey_02_destination_desc + } + + text = { # york_walls_01 + trigger = { + has_special_building = yes + has_building_or_higher = york_walls_01 + } + localization_key = building_york_walls_01_destination_desc + } + + text = { # damascus_mosque_01 + trigger = { + has_special_building = yes + has_building_or_higher = damascus_mosque_01 + } + localization_key = building_damascus_mosque_01_destination_desc + } + + text = { # jokhang_01 + trigger = { + has_special_building = yes + has_building_or_higher = jokhang_01 + } + localization_key = building_jokhang_01_destination_desc + } + + text = { # wartburg_01 + trigger = { + has_special_building = yes + has_building_or_higher = wartburg_01 + } + localization_key = building_wartburg_01_destination_desc + } + + text = { # beta_giyorgis_01 + trigger = { + has_special_building = yes + has_building_or_higher = beta_giyorgis_01 + } + localization_key = building_beta_giyorgis_01_destination_desc + } + + text = { # holy_wisdom_01 + trigger = { + has_special_building = yes + has_building_or_higher = holy_wisdom_01 + } + localization_key = building_holy_wisdom_01_destination_desc + } + + text = { # kano_walls_01 + trigger = { + has_special_building = yes + has_building_or_higher = kano_walls_01 + } + localization_key = building_kano_walls_01_destination_desc + } + + text = { # somapura_university_01 + trigger = { + has_special_building = yes + has_building_or_higher = somapura_university_01 + } + localization_key = building_somapura_university_01_destination_desc + } + + text = { # duomo_florence_01 + trigger = { + has_special_building = yes + has_building = duomo_florence_01 + } + localization_key = building_duomo_florence_01_destination_desc + } + + text = { # duomo_florence_02 + trigger = { + has_special_building = yes + has_building = duomo_florence_02 + } + localization_key = building_duomo_florence_02_destination_desc + } + + text = { # duomo_florence_03 + trigger = { + has_special_building = yes + has_building = duomo_florence_03 + } + localization_key = building_duomo_florence_03_destination_desc + } + + text = { # duomo_florence_04 + trigger = { + has_special_building = yes + has_building = duomo_florence_04 + } + localization_key = building_duomo_florence_04_destination_desc + } + + text = { # konark_temple_01 + trigger = { + has_special_building = yes + has_building_or_higher = konark_temple_01 + } + localization_key = building_konark_temple_01_destination_desc + } + + text = { # al_qarawiyyin_university_01 + trigger = { + has_special_building = yes + has_building_or_higher = al_qarawiyyin_university_01 + } + localization_key = building_al_qarawiyyin_university_01_destination_desc + } + + text = { # kairouan_basins_01 + trigger = { + has_special_building = yes + has_building_or_higher = kairouan_basins_01 + } + localization_key = building_kairouan_basins_01_destination_desc + } + + text = { # ghana_palace_01 + trigger = { + has_special_building = yes + has_building_or_higher = ghana_palace_01 + } + localization_key = building_ghana_palace_01_destination_desc + } + + text = { # visegrad_castle_01 + trigger = { + has_special_building = yes + has_building_or_higher = visegrad_castle_01 + } + localization_key = building_visegrad_castle_01_destination_desc + } + + text = { # wawel_cathedral_01 + trigger = { + has_special_building = yes + has_building_or_higher = wawel_cathedral_01 + } + localization_key = building_wawel_cathedral_01_destination_desc + } + + text = { # vatapi_caves_01 + trigger = { + has_special_building = yes + has_building_or_higher = vatapi_caves_01 + } + localization_key = building_vatapi_caves_01_destination_desc + } + + text = { # jaisalmer_fort_01 + trigger = { + has_special_building = yes + has_building_or_higher = jaisalmer_fort_01 + } + localization_key = building_jaisalmer_fort_01_destination_desc + } + #CCP3 End + #CE2 + text = { # Pleasure Dome + trigger = { + has_special_building = yes + has_building_or_higher = pleasure_dome + } + localization_key = building_pleasure_dome_01_destination_desc + } + + text = { # Burkhan Khaldun + trigger = { + has_special_building = yes + has_building_or_higher = burkhan_khaldun_01 + } + localization_key = building_burkhan_khaldun_01_destination_desc + } + + #CE2 End text = { # legendary_shrine trigger = { has_special_building = yes @@ -1924,7 +2137,6 @@ fallback = yes localization_key = building_generic_destination_desc } - } GetTouristHoldingIntro = { @@ -2489,6 +2701,7 @@ GetSpecialBuildingPrefix = { has_building = hadrians_wall_01 has_building = offas_dyke_01 has_building = maharloo_lake_01 + has_building = duomo_florence_04 } } localization_key = blank_line @@ -2524,6 +2737,7 @@ GetSpecialBuildingSurface = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = the_mine_entrance @@ -2604,6 +2818,7 @@ GetSpecialBuildingSong = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = event_song_mines_01 @@ -2619,6 +2834,7 @@ GetSpecialBuildingSong = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = event_song_mines_02 @@ -2634,6 +2850,7 @@ GetSpecialBuildingSong = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = event_song_mines_03 @@ -2688,6 +2905,7 @@ GetSpecialBuildingSong = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = event_song_economic_01 @@ -2703,6 +2921,7 @@ GetSpecialBuildingSong = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = event_song_economic_02 @@ -2718,6 +2937,7 @@ GetSpecialBuildingSong = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = event_song_economic_03 @@ -2882,6 +3102,7 @@ GetSpecialBuildingCatSleepingSpot = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = cats_sleeping_mines_01 @@ -2897,6 +3118,7 @@ GetSpecialBuildingCatSleepingSpot = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = cats_sleeping_mines_02 @@ -2912,6 +3134,7 @@ GetSpecialBuildingCatSleepingSpot = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = cats_sleeping_mines_03 @@ -2981,6 +3204,7 @@ GetSpecialBuildingCatSleepingSpot = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = cats_sleeping_economic_02 @@ -2996,6 +3220,7 @@ GetSpecialBuildingCatSleepingSpot = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = cats_sleeping_economic_03 @@ -3360,6 +3585,7 @@ GetSpecialBuildingNonsensicalClaim = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = guide_mines_1 @@ -3375,6 +3601,7 @@ GetSpecialBuildingNonsensicalClaim = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = guide_mines_2 @@ -3390,6 +3617,7 @@ GetSpecialBuildingNonsensicalClaim = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = guide_mines_3 @@ -3405,6 +3633,7 @@ GetSpecialBuildingNonsensicalClaim = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = guide_mines_4 @@ -3420,6 +3649,7 @@ GetSpecialBuildingNonsensicalClaim = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = guide_mines_5 @@ -3505,6 +3735,7 @@ GetSpecialBuildingNonsensicalClaim = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } NOR = { has_building = iron_pillar_of_delhi_01 @@ -3524,6 +3755,7 @@ GetSpecialBuildingNonsensicalClaim = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } NOR = { has_building = iron_pillar_of_delhi_01 @@ -3543,6 +3775,7 @@ GetSpecialBuildingNonsensicalClaim = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } NOR = { has_building = iron_pillar_of_delhi_01 @@ -3562,6 +3795,7 @@ GetSpecialBuildingNonsensicalClaim = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } NOR = { has_building = iron_pillar_of_delhi_01 @@ -3581,6 +3815,7 @@ GetSpecialBuildingNonsensicalClaim = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } NOR = { has_building = iron_pillar_of_delhi_01 @@ -3860,6 +4095,7 @@ GetSpecialBuildingPerson = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = mines_overseer @@ -3875,6 +4111,7 @@ GetSpecialBuildingPerson = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = mines_smith @@ -3890,6 +4127,7 @@ GetSpecialBuildingPerson = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } } localization_key = mines_miner @@ -3961,6 +4199,7 @@ GetSpecialBuildingPerson = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } NOR = { has_building = iron_pillar_of_delhi_01 @@ -3980,6 +4219,7 @@ GetSpecialBuildingPerson = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } NOR = { has_building = iron_pillar_of_delhi_01 @@ -3999,6 +4239,7 @@ GetSpecialBuildingPerson = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } NOR = { has_building = iron_pillar_of_delhi_01 @@ -4018,6 +4259,7 @@ GetSpecialBuildingPerson = { has_building = iron_pillar_of_dhar_01 has_building = petra_01 has_building = fairy_chimneys + has_building = kairouan_basins_01 } NOR = { has_building = iron_pillar_of_delhi_01 diff --git a/common/customizable_localization/00_vassal_custom_loc.txt b/common/customizable_localization/00_vassal_custom_loc.txt index c2bc816b..5199c51f 100644 --- a/common/customizable_localization/00_vassal_custom_loc.txt +++ b/common/customizable_localization/00_vassal_custom_loc.txt @@ -84,6 +84,10 @@ vassal_directive_icon = { has_character_flag = vassal_directive_building_focus_fortification has_character_flag = vassal_directive_building_focus_military has_character_flag = vassal_directive_building_focus_economy + has_character_flag = vassal_directive_manage_fertility + has_character_flag = vassal_directive_explore_cultures + has_character_flag = vassal_directive_raid_innovation_intent + has_character_flag = vassal_directive_raid_herd_intent } } } @@ -101,6 +105,10 @@ vassal_directive_icon = { has_character_flag = vassal_directive_building_focus_fortification has_character_flag = vassal_directive_building_focus_military has_character_flag = vassal_directive_building_focus_economy + has_character_flag = vassal_directive_manage_fertility + has_character_flag = vassal_directive_explore_cultures + has_character_flag = vassal_directive_raid_innovation_intent + has_character_flag = vassal_directive_raid_herd_intent } save_temporary_scope_as = vassal_scope NOT = { vassal_is_valid_and_follows_directive_trigger = { VASSAL = scope:vassal_scope LIEGE = scope:vassal_scope.liege } } @@ -170,6 +178,31 @@ vassal_directive_icon = { } } + text = { + localization_key = manage_fertility_icon + trigger = { + has_character_flag = vassal_directive_manage_fertility + } + } + text = { + localization_key = explore_cultures_icon + trigger = { + has_character_flag = vassal_directive_explore_cultures + } + } + text = { + localization_key = raid_innovation_intent_icon + trigger = { + has_character_flag = vassal_directive_raid_innovation_intent + } + } + text = { + localization_key = raid_herd_intent_icon + trigger = { + has_character_flag = vassal_directive_raid_herd_intent + } + } + text = { localization_key = blank_line trigger = { @@ -195,6 +228,10 @@ vassal_directive_text = { has_character_flag = vassal_directive_building_focus_fortification has_character_flag = vassal_directive_building_focus_military has_character_flag = vassal_directive_building_focus_economy + has_character_flag = vassal_directive_manage_fertility + has_character_flag = vassal_directive_explore_cultures + has_character_flag = vassal_directive_raid_innovation_intent + has_character_flag = vassal_directive_raid_herd_intent } } } @@ -212,6 +249,10 @@ vassal_directive_text = { has_character_flag = vassal_directive_building_focus_fortification has_character_flag = vassal_directive_building_focus_military has_character_flag = vassal_directive_building_focus_economy + has_character_flag = vassal_directive_manage_fertility + has_character_flag = vassal_directive_explore_cultures + has_character_flag = vassal_directive_raid_innovation_intent + has_character_flag = vassal_directive_raid_herd_intent } save_temporary_scope_as = vassal_scope NOT = { vassal_is_valid_and_follows_directive_trigger = { VASSAL = scope:vassal_scope LIEGE = scope:vassal_scope.liege } } @@ -281,6 +322,31 @@ vassal_directive_text = { } } + text = { + localization_key = county_fertility_text + trigger = { + has_character_flag = vassal_directive_manage_fertility + } + } + text = { + localization_key = explore_cultures_text + trigger = { + has_character_flag = vassal_directive_explore_cultures + } + } + text = { + localization_key = culture_text + trigger = { + has_character_flag = vassal_directive_raid_innovation_intent + } + } + text = { + localization_key = herd_text + trigger = { + has_character_flag = vassal_directive_raid_herd_intent + } + } + text = { localization_key = blank_line trigger = { diff --git a/common/customizable_localization/00_visit_settlement_custom_loc.txt b/common/customizable_localization/00_visit_settlement_custom_loc.txt index 16da0efa..35f98b21 100644 --- a/common/customizable_localization/00_visit_settlement_custom_loc.txt +++ b/common/customizable_localization/00_visit_settlement_custom_loc.txt @@ -1,4 +1,38 @@  +IsAlreadyVisiting = { + type = character + + #Temporary fix #TODO_CD_TGP TIT-57969 Hook these strings in when we get code support for comparing time left on variables + text = { + trigger = { + exists = var:ep3_laamp_decision_1000_is_visiting + always = yes + } + localization_key = DECISION_ALREADY_VISITING_LOCAL_SETTLEMENT_TIME + } + + #Are you *bugged out* (did the variable linger longer than it should) + text = { + trigger = { + exists = var:ep3_laamp_decision_1000_is_visiting + always = no #TODO_CD_TGP TIT-57969 remove and uncomment below + #var_time_remaining:ep3_laamp_decision_1000_is_visiting < visit_settlement_lock_days + } + localization_key = DECISION_ALREADY_VISITING_LOCAL_SETTLEMENT_TIME + } + + #Or are you *just* visiting a Settlement + text = { + trigger = { + exists = var:ep3_laamp_decision_1000_is_visiting + always = no #TODO_CD_TGP TIT-57969 remove and uncomment below + #var_time_remaining:ep3_laamp_decision_1000_is_visiting = visit_settlement_lock_days + } + localization_key = DECISION_ALREADY_VISITING_LOCAL_SETTLEMENT_NO_TIME + } + +} + #The loc string has a concept in this version of the custom loc LocalHoldingTypeConcept = { type = character @@ -12,11 +46,31 @@ LocalHoldingTypeConcept = { text = { trigger = { - location = { has_holding_type = tribal_holding } + location = { + has_holding_type = tribal_holding + } } localization_key = local_holding_type_concept_tribal_holding } + text = { + trigger = { + location = { + has_holding_type = nomad_holding + } + } + localization_key = local_holding_type_concept_nomad_holding + } + + text = { + trigger = { + location = { + has_holding_type = herder_holding + } + } + localization_key = local_holding_type_concept_herder_holding + } + #Christian text = { trigger = { @@ -67,11 +121,31 @@ LocalHoldingType = { text = { trigger = { - location = { has_holding_type = tribal_holding } + location = { + has_holding_type = tribal_holding + } } localization_key = local_holding_type_tribal_holding } + text = { + trigger = { + location = { + has_holding_type = nomad_holding + } + } + localization_key = local_holding_type_nomad_holding + } + + text = { + trigger = { + location = { + has_holding_type = herder_holding + } + } + localization_key = local_holding_type_herder_holding + } + #Christian text = { trigger = { @@ -122,11 +196,31 @@ LocalHoldingTypeCapitalized = { text = { trigger = { - location = { has_holding_type = tribal_holding } + location = { + has_holding_type = tribal_holding + } } localization_key = local_holding_type_capitalized_tribal_holding } + text = { + trigger = { + location = { + has_holding_type = nomad_holding + } + } + localization_key = local_holding_type_capitalized_nomad_holding + } + + text = { + trigger = { + location = { + has_holding_type = herder_holding + } + } + localization_key = local_holding_type_capitalized_herder_holding + } + #Christian text = { trigger = { @@ -170,14 +264,24 @@ SettlementCity = { text = { trigger = { - location = { - OR = { - has_holding = no - has_holding_type = tribal_holding + OR = { + location = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + AND = { + location = { + OR = { + has_holding = no + has_holding_type = tribal_holding + } + } + location.county.culture = { + has_cultural_tradition = tradition_horse_lords + } } - } - location.county.culture = { - has_cultural_tradition = tradition_horse_lords } } localization_key = is_encampment @@ -189,6 +293,8 @@ SettlementCity = { OR = { has_holding = no has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding } } } @@ -574,9 +680,13 @@ GetBuildingDwelling = { text = { trigger = { - location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + location = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_dwelling @@ -593,8 +703,12 @@ GetTavernDwelling = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_dwelling @@ -611,8 +725,12 @@ GetTaverngoersTribespeople = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_tribespeople @@ -629,8 +747,12 @@ GetRoomTent = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_tent @@ -647,8 +769,12 @@ GetDoorTentflap = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_tentflap @@ -665,8 +791,12 @@ GetCrookedhousesDelapidatedtents = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_delapitated_tents @@ -683,8 +813,12 @@ GetTowncrierElder = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_elder @@ -701,8 +835,12 @@ GetTowncrierElderCapitalized = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_capitalized_elder @@ -720,8 +858,12 @@ GetMainsquareCommons = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_commons @@ -738,8 +880,12 @@ GetMainsquareCommonsCapitalized = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_capitalized_commons @@ -756,8 +902,12 @@ GetCeilingCanopy = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_canopy @@ -834,8 +984,12 @@ GetSquareCommons = { text = { trigger = { location = { - has_holding_type = tribal_holding - is_nomadic_location_trigger = yes + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + has_holding_type = tribal_holding + is_nomadic_location_trigger = yes + } } } localization_key = is_commons diff --git a/common/customizable_localization/00_war_custom_loc.txt b/common/customizable_localization/00_war_custom_loc.txt index 7fc871e1..77dc8717 100644 --- a/common/customizable_localization/00_war_custom_loc.txt +++ b/common/customizable_localization/00_war_custom_loc.txt @@ -2,6 +2,15 @@ WarDeclaredOpening = { type = war + text = { + trigger = { #War to stop the Gurkhan from becoming Greatest of Khans + root = { + using_cb = mpo_great_war_of_defiance_cb + } + } + localization_key = war_declared_opening_mpo_gok + } + text = { trigger = { root.primary_attacker = { @@ -26,6 +35,15 @@ WarDeclaredOpening = { WarDeclaredFlavor = { type = war + text = { + trigger = { #War to stop the Gurkhan from becoming Greatest of Khans + root = { + using_cb = mpo_great_war_of_defiance_cb + } + } + localization_key = war_declared_flavor_mpo_gok + } + text = { # Used when one or more Deviant Lovers manage to get into a war with each other. trigger = { root.primary_attacker = { @@ -378,6 +396,7 @@ WarCasusBelliShort = { using_cb = ep3_laamp_adventurer_duchy_invasion using_cb = ep3_laamp_adventurer_kingdom_invasion using_cb = ep3_laamp_adventurer_empire_invasion + using_cb = mpo_gok_onslaught_cb } } localization_key = war_memory_cb_invasion diff --git a/common/customizable_localization/00_yearly_events_custom_loc.txt b/common/customizable_localization/00_yearly_events_custom_loc.txt index f377393d..f613dd9d 100644 --- a/common/customizable_localization/00_yearly_events_custom_loc.txt +++ b/common/customizable_localization/00_yearly_events_custom_loc.txt @@ -105,3 +105,4 @@ YearlyEvent0001SkillShort = { localization_key = yearly.0001.learning_short } } + diff --git a/common/customizable_localization/01_bp1_custom_loc.txt b/common/customizable_localization/01_bp1_custom_loc.txt index 42a7e037..02ecf932 100644 --- a/common/customizable_localization/01_bp1_custom_loc.txt +++ b/common/customizable_localization/01_bp1_custom_loc.txt @@ -377,6 +377,12 @@ GetFamilyFeudLongFlavor = { house_feud_story_flag_trigger = { VARIABLE = house_feud_reason FLAG = raid_estate } } } + text = { + localization_key = house_feud_stolen_herd_flavor + trigger = { + house_feud_story_flag_trigger = { VARIABLE = house_feud_reason FLAG = stolen_herd } + } + } } GetFamilyFeudBalance = { diff --git a/common/customizable_localization/01_ep1_custom_loc.txt b/common/customizable_localization/01_ep1_custom_loc.txt index 77161c13..059b8313 100644 --- a/common/customizable_localization/01_ep1_custom_loc.txt +++ b/common/customizable_localization/01_ep1_custom_loc.txt @@ -2068,6 +2068,54 @@ GetTargetCourtPosition = { trigger = { var:target_court_position ?= flag:court_jester } localization_key = court_position_court_jester } + text = { + trigger = { var:target_court_position ?= flag:court_astrologer } + localization_key = court_position_court_astrologer + } + text = { + trigger = { var:target_court_position ?= flag:wet_nurse } + localization_key = court_position_wet_nurse + } + text = { + trigger = { var:target_court_position ?= flag:cave_hermit } + localization_key = court_position_cave_hermit + } + text = { + trigger = { var:target_court_position ?= flag:master_assassin } + localization_key = court_position_master_assassin + } + text = { + trigger = { var:target_court_position ?= flag:court_scholar } + localization_key = court_position_court_scholar + } + text = { + trigger = { var:target_court_position ?= flag:boyan } + localization_key = court_position_boyan + } + text = { + trigger = { var:target_court_position ?= flag:siege_engineer } + localization_key = court_position_siege_engineer + } + text = { + trigger = { var:target_court_position ?= flag:yurtchi } + localization_key = court_position_yurtchi + } + text = { + trigger = { var:target_court_position ?= flag:cherbi } + localization_key = court_position_cherbi + } + text = { + trigger = { var:target_court_position ?= flag:yeke_jarquchi } + localization_key = court_position_yeke_jarquchi + } + text = { + trigger = { var:target_court_position ?= flag:foreign_emissary } + localization_key = court_position_foreign_emissary + } + text = { + trigger = { var:target_court_position ?= flag:keeper_of_the_horses } + localization_key = court_position_keeper_of_the_horses + } } GetTargetCourtPositionDesc = { @@ -2189,6 +2237,54 @@ GetTargetCourtPositionDesc = { trigger = { var:target_court_position ?= flag:court_jester } localization_key = court_position_desc_court_jester } + text = { + trigger = { var:target_court_position ?= flag:court_astrologer } + localization_key = court_position_desc_court_astrologer + } + text = { + trigger = { var:target_court_position ?= flag:wet_nurse } + localization_key = court_position_desc_wet_nurse + } + text = { + trigger = { var:target_court_position ?= flag:cave_hermit } + localization_key = court_position_desc_cave_hermit + } + text = { + trigger = { var:target_court_position ?= flag:master_assassin } + localization_key = court_position_desc_master_assassin + } + text = { + trigger = { var:target_court_position ?= flag:court_scholar } + localization_key = court_position_desc_court_scholar + } + text = { + trigger = { var:target_court_position ?= flag:boyan } + localization_key = court_position_desc_boyan + } + text = { + trigger = { var:target_court_position ?= flag:siege_engineer } + localization_key = court_position_desc_siege_engineer + } + text = { + trigger = { var:target_court_position ?= flag:yurtchi } + localization_key = court_position_desc_yurtchi + } + text = { + trigger = { var:target_court_position ?= flag:cherbi } + localization_key = court_position_desc_cherbi + } + text = { + trigger = { var:target_court_position ?= flag:yeke_jarquchi } + localization_key = court_position_desc_yeke_jarquchi + } + text = { + trigger = { var:target_court_position ?= flag:foreign_emissary } + localization_key = court_position_desc_foreign_emissary + } + text = { + trigger = { var:target_court_position ?= flag:keeper_of_the_horses } + localization_key = court_position_desc_keeper_of_the_horses + } } GetCourtPositionSubject = { diff --git a/common/customizable_localization/04_ep2_custom_loc.txt b/common/customizable_localization/04_ep2_custom_loc.txt index 0f60491c..0c94c0ae 100644 --- a/common/customizable_localization/04_ep2_custom_loc.txt +++ b/common/customizable_localization/04_ep2_custom_loc.txt @@ -2039,10 +2039,6 @@ GetBirdName = { localization_key = swan_name_anklebiter } - text = { - localization_key = swan_name_odette - } - text = { localization_key = pet_name_petal } @@ -2058,10 +2054,6 @@ GetBirdName = { text = { localization_key = pet_name_spring_blossom } - - text = { - localization_key = chicken - } text = { localization_key = food_word_biscuit diff --git a/common/customizable_localization/05_bp2_custom_loc.txt b/common/customizable_localization/05_bp2_custom_loc.txt index 93d790f2..0a27bf5b 100644 --- a/common/customizable_localization/05_bp2_custom_loc.txt +++ b/common/customizable_localization/05_bp2_custom_loc.txt @@ -71,6 +71,21 @@ GetHerHisOpposite = { } } +GetHerHimOpposite = { + type = character + random_valid = yes + + text = { + trigger = { is_female = yes } + localization_key = CHARACTER_HERHIM_HIM + } + + text = { + trigger = { is_male = yes } + localization_key = CHARACTER_HERHIM_HER + } +} + GetRandomWomanMan = { type = character random_valid = yes diff --git a/common/customizable_localization/07_ep3_custom_loc.txt b/common/customizable_localization/07_ep3_custom_loc.txt index 84973fc1..8f91a35c 100644 --- a/common/customizable_localization/07_ep3_custom_loc.txt +++ b/common/customizable_localization/07_ep3_custom_loc.txt @@ -82,6 +82,20 @@ GetCourtierTypeConcept = { } } +GetCourtiersTypeConcept = { + type = character + + text = { + trigger = { is_landless_adventurer = yes } + localization_key = FOLLOWER_PLURAL + } + + text = { + trigger = { is_landless_adventurer = no } + localization_key = COURTIER_PLURAL + } +} + TriumphReligiousLocation = { type = character @@ -1910,6 +1924,13 @@ GetContractOrIssue = { localization_key = TASK_CONTRACT_ISSUE } + text = { + trigger = { + government_has_flag = government_is_nomadic + } + localization_key = TASK_CONTRACT_SETTLEMENT_ISSUE + } + text = { trigger = { always = no } fallback = yes @@ -1942,9 +1963,16 @@ GetContractOrIssueGameConcept = { localization_key = GOVERNANCE_ISSUE } + text = { + trigger = { + government_has_flag = government_is_nomadic + } + localization_key = SETTLEMENT_ISSUE + } + text = { trigger = { always = no } fallback = yes localization_key = TASK_CONTRACT } -} \ No newline at end of file +} diff --git a/common/customizable_localization/09_mpo_custom_loc.txt b/common/customizable_localization/09_mpo_custom_loc.txt new file mode 100644 index 00000000..0ff46587 --- /dev/null +++ b/common/customizable_localization/09_mpo_custom_loc.txt @@ -0,0 +1,699 @@ +mpo_ariana_0050_description = { + type = character + + text = { + trigger = { + OR = { + has_trait = deceitful + has_trait = schemer + } + } + localization_key = mpo_ariana_0050_scheming + } + + text = { + trigger = { + OR = { + has_trait = greedy + has_trait = avaricious + } + } + localization_key = mpo_ariana_0050_greedy + } +} + +mpo_yearly_ethos = { + type = character + random_valid = yes + + text = { + trigger = { + culture = { has_cultural_pillar = ethos_bellicose } + } + localization_key = mpo_yearly_bellicose + } + + text = { + trigger = { + culture = { has_cultural_pillar = ethos_stoic } + } + localization_key = mpo_yearly_stoic + } + + text = { + trigger = { + culture = { has_cultural_pillar = ethos_bureaucratic } + } + localization_key = mpo_yearly_bureaucratic + } + + text = { + trigger = { + culture = { has_cultural_pillar = ethos_spiritual } + } + localization_key = mpo_yearly_spiritual + } + + text = { + trigger = { + culture = { has_cultural_pillar = ethos_courtly } + } + localization_key = mpo_yearly_courtly + } + + text = { + trigger = { + culture = { has_cultural_pillar = ethos_egalitarian } + } + localization_key = mpo_yearly_egalitarian + } + + text = { + trigger = { + culture = { has_cultural_pillar = ethos_communal } + } + localization_key = mpo_yearly_communal + } +} + +GetStudyCommanderTraitSuccessChance = { + type = character + + text = { + trigger = { + study_commander_trait_success_chance_value >= study_commander_trait_success_chance_very_good_value + } + localization_key = study_commander_success_chance_very_good + } + + text = { + trigger = { + study_commander_trait_success_chance_value >= study_commander_trait_success_chance_good_value + study_commander_trait_success_chance_value < study_commander_trait_success_chance_very_good_value + } + localization_key = study_commander_success_chance_good + } + + text = { + trigger = { + study_commander_trait_success_chance_value >= study_commander_trait_success_chance_fair_value + study_commander_trait_success_chance_value < study_commander_trait_success_chance_good_value + } + localization_key = study_commander_success_chance_fair + } + + text = { + trigger = { + study_commander_trait_success_chance_value >= study_commander_trait_success_chance_poor_value + study_commander_trait_success_chance_value < study_commander_trait_success_chance_fair_value + } + localization_key = study_commander_success_chance_poor + } + + text = { + trigger = { + study_commander_trait_success_chance_value < study_commander_trait_success_chance_poor_value + } + localization_key = study_commander_success_chance_very_poor + } + + text = { + localization_key = study_commander_success_chance_none + } +} + + +GetRandomRegionalPoisonousSnake = { # Has an article + type = province + + random_valid = yes + + text = { + trigger = { + is_sea_province = yes + OR = { + geographical_region = world_asia_minor + geographical_region = world_middle_east + geographical_region = world_africa + } + } + localization_key = animal_cobra + } + + text = { + trigger = { # Generally Asia + OR = { + geographical_region = world_india + geographical_region = world_burma + } + } + localization_key = animal_krait + } + + text = { + trigger = { + OR = { + geographical_region = world_africa_west + geographical_region = world_africa_east + geographical_region = world_africa_sahara + } + } + localization_key = animal_black_mamba + } + + text = { + trigger = { + OR = { + geographical_region = world_europe_east + geographical_region = world_middle_east + geographical_region = world_steppe_east + } + } + localization_key = animal_grass_snake + } + + text = { + trigger = { + geographical_region = world_africa + } + localization_key = animal_tiger_snake + } + + text = { + trigger = { + OR = { + geographical_region = world_africa + geographical_region = world_middle_east + } + } + localization_key = animal_burrowing_asp + } + + text = { + trigger = { + geographical_region = world_europe + } + localization_key = animal_adder + } + + text = { + trigger = { + is_sea_province = yes + } + localization_key = animal_yellow_bellied_snake + } + + text = { + trigger = { + is_sea_province = yes + } + localization_key = animal_sea_snake + } + + text = { + localization_key = animal_viper + } + + text = { + localization_key = animal_snake_article + } +} + +GetTsagaanSarGiftDesc = { + type = character + random_valid = yes + + # Gold + text = { + trigger = { + var:tsagaan_sar_gift_item ?= flag:gold + } + localization_key = gift_some_coin + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:miniscule + var:tsagaan_sar_gift_item ?= flag:gold + } + localization_key = gift_satchel_gold + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:miniscule + var:tsagaan_sar_gift_item ?= flag:gold + } + localization_key = gift_handful_gold + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:minor + var:tsagaan_sar_gift_item ?= flag:gold + } + localization_key = gift_small_chest_gold + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:minor + var:tsagaan_sar_gift_item ?= flag:gold + } + localization_key = gift_canister_gold + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:medium + var:tsagaan_sar_gift_item ?= flag:gold + } + localization_key = gift_coffer_gold + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:medium + var:tsagaan_sar_gift_item ?= flag:gold + } + localization_key = gift_basket_gold + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:medium + var:tsagaan_sar_gift_item ?= flag:gold + } + localization_key = gift_barrel_gold + } + + # Herd + text = { + trigger = { + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_some_flock + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:miniscule + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_horse + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:miniscule + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_sheep + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:miniscule + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_cattle + } + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:minor + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_horse_plural + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:minor + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_sheep_plural + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:minor + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_cattle_plural + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:minor + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_small_herd + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:medium + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_herd + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:medium + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_large_herd + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:medium + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_large_flock + } + + text = { + trigger = { + var:tsagaan_sar_gift_amount ?= flag:medium + var:tsagaan_sar_gift_item ?= flag:herd + } + localization_key = gift_large_flock_2 + } + + # Piety + text = { + trigger = { + var:tsagaan_sar_gift_item ?= flag:piety + + } + localization_key = gift_prayer + } + text = { + trigger = { + employs_court_position = court_astrologer_court_position + var:tsagaan_sar_gift_item ?= flag:piety + } + localization_key = gift_astrologer_prayer + } + + # Prestige + text = { + trigger = { + var:tsagaan_sar_gift_item ?= flag:prestige + } + localization_key = gift_word + } + + text = { + localization_key = gift_generic + } + + text = { + localization_key = gift_generic_2 + } +} + +GetRandomThroatSingingTheme = { + type = character + random_valid = yes + + text = { + trigger = { + is_landed = yes + } + localization_key = throat_singing_theme_realm + } + + text = { + localization_key = throat_singing_theme_nature + } + + text = { + localization_key = throat_singing_theme_love + } + + text = { + localization_key = throat_singing_theme_war + } + + text = { + localization_key = throat_singing_theme_hunting + } + + text = { + localization_key = throat_singing_theme_horse + } + + text = { + trigger = { + NOT = { has_trait = cynical } + } + localization_key = throat_singing_theme_spiritual + } + + text = { + localization_key = throat_singing_theme_orphan + } +} + +# this is a glossary +GetThroatSingingStyle = { + type = character + + text = { + trigger = { + var:throatsinging_style ?= flag:sygyt + } + localization_key = throat_singing_style_sygyt + } + text = { + trigger = { + var:throatsinging_style ?= flag:hoomei + } + localization_key = throat_singing_style_hoomei + } + text = { + trigger = { + var:throatsinging_style ?= flag:kargyraa + } + localization_key = throat_singing_style_kargyraa + } +} + +GetLunarNewYearAnimal = { + type = character + + text = { + trigger = { + mpo_zodiac_calculation_value = 0 + } + localization_key = lunar_new_year_animal_monkey + } + text = { + trigger = { + mpo_zodiac_calculation_value = 1 + } + localization_key = lunar_new_year_animal_rooster + } + text = { + trigger = { + mpo_zodiac_calculation_value = 2 + } + localization_key = lunar_new_year_animal_dog + } + text = { + trigger = { + mpo_zodiac_calculation_value = 3 + } + localization_key = lunar_new_year_animal_pig + } + text = { + trigger = { + mpo_zodiac_calculation_value = 4 + } + localization_key = lunar_new_year_animal_rat + } + text = { + trigger = { + mpo_zodiac_calculation_value = 5 + } + localization_key = lunar_new_year_animal_ox + } + text = { + trigger = { + mpo_zodiac_calculation_value = 6 + } + localization_key = lunar_new_year_animal_tiger + } + text = { + trigger = { + mpo_zodiac_calculation_value = 7 + } + localization_key = lunar_new_year_animal_rabbit + } + text = { + trigger = { + mpo_zodiac_calculation_value = 8 + } + localization_key = lunar_new_year_animal_dragon + } + text = { + trigger = { + mpo_zodiac_calculation_value = 9 + } + localization_key = lunar_new_year_animal_snake + } + text = { + trigger = { + mpo_zodiac_calculation_value = 10 + } + localization_key = lunar_new_year_animal_horse + } + text = { + trigger = { + mpo_zodiac_calculation_value = 11 + } + localization_key = lunar_new_year_animal_sheep + } +} + +GetLunarNewYearAnimalToastDesc = { + parent = GetLunarNewYearAnimal + suffix = _desc +} + +GetWomenOrMenBasedOnFaith = { + random_valid = yes + type = character + + text = { + trigger = { + faith_dominant_gender_male_or_equal = yes + } + localization_key = loc_men + } + + text = { + trigger = { + faith_dominant_gender_female_or_equal = yes + } + localization_key = women + } +} + +GetWomenOrMenBasedOnFaithOpposite = { + random_valid = yes + type = character + + text = { + trigger = { + faith_dominant_gender_male_or_equal = yes + } + localization_key = women + } + + text = { + trigger = { + faith_dominant_gender_female_or_equal = yes + } + localization_key = loc_men + } +} + +GetMartialHerHis = { + type = character + text = { + trigger = { + save_temporary_scope_as = char + dummy_male = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:char } + } + NOT = { + dummy_female = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:char } + } + } + } + localization_key = CHARACTER_HERHIS_HIS + } + text = { + trigger = { + save_temporary_scope_as = char + dummy_male = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:char } + } + NOT = { + dummy_female = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:char } + } + } + } + localization_key = CHARACTER_HERHIS_HER + } + text = { + trigger = { + save_temporary_scope_as = char + dummy_male = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:char } + } + dummy_female = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:char } + } + } + localization_key = CHARACTER_HERHIS_THEIR + } +} + +GetDominateTitleLoc = { + type = character + text = { + trigger = { + exists = primary_title.duchy + } + localization_key = nomad_higher_tier_title_decision_title + } + text = { + localization_key = TITLE_VIEW_CREATE_TITLE_NOMAD + } +} + +GetCowedVassalVarLoc = { + type = character + text = { + trigger = { + has_variable = temp_tributary_protection + } + localization_key = temp_tributary_protection_reason_var + } + text = { + localization_key = temp_tributary_protection_reason_no_var + } +} + +GetAptitudeYekeJarquchiLoc = { + type = character + text = { + trigger = { + employs_court_position = yeke_jarquchi_court_position + } + localization_key = yeke_jarquchi_aptitude + } + text = { + localization_key = yeke_jarquchi_missing_aptitude + } +} + +GetAptitudeForeignEmissaryLoc = { + type = character + text = { + trigger = { + employs_court_position = foreign_emissary_court_position + } + localization_key = foreign_emissary_aptitude + } + text = { + localization_key = foreign_emissary_missing_aptitude + } +} diff --git a/common/customizable_localization/09_mpo_custom_loc_2.txt b/common/customizable_localization/09_mpo_custom_loc_2.txt new file mode 100644 index 00000000..8d5601d9 --- /dev/null +++ b/common/customizable_localization/09_mpo_custom_loc_2.txt @@ -0,0 +1,26 @@ +#GetMongolHonorific +GetMongolHonorific = { + type = character + random_valid = yes + + text = { # Dreaded + localization_key = GetMongolHonorific_dreaded + } + + text = { # Dreadful + fallback = yes + localization_key = GetMongolHonorific_dreadful + } + + text = { # Mighty + localization_key = GetMongolHonorific_mighty + } + + text = { # Fearsome + localization_key = GetMongolHonorific_fearsome + } + + text = { # Frightful + localization_key = GetMongolHonorific_frightful + } +} \ No newline at end of file diff --git a/common/customizable_localization/99_fr_custom_loc.txt b/common/customizable_localization/99_fr_custom_loc.txt index 7caaf7ea..a4277590 100644 --- a/common/customizable_localization/99_fr_custom_loc.txt +++ b/common/customizable_localization/99_fr_custom_loc.txt @@ -286,10 +286,10 @@ FR_gender_template = { # all basic gendered character custom commands are based scope:second = { is_female = yes } } } - localization_key = CustomLoc_FR_female_ + localization_key = FR_female_ } text = { - localization_key = CustomLoc_FR_male_ + localization_key = FR_male_ fallback = yes } } @@ -927,10 +927,10 @@ FR_FaithGenderedAdj = { this = { is_female = yes } } } - localization_key = CustomLoc_FR_FaithGenderedAdj_female + localization_key = FR_FaithGenderedAdj_female } text = { - localization_key = CustomLoc_FR_FaithGenderedAdj_male + localization_key = FR_FaithGenderedAdj_male fallback = yes } } @@ -943,17 +943,17 @@ FR_le_Char_L = { holds_landed_title = no is_female = no } - localization_key = CustomLoc_FR_le + localization_key = FR_le } text = { trigger = { holds_landed_title = no is_female = yes } - localization_key = CustomLoc_FR_la + localization_key = FR_la } text = { - localization_key = CustomLoc_FR_le_Char + localization_key = FR_le_Char fallback = yes } } @@ -965,7 +965,7 @@ FR_le_Char_U_Pi = { trigger = { is_local_player = yes } - localization_key = CustomLoc_FR_empty + localization_key = FR_empty } text = { trigger = { @@ -974,10 +974,10 @@ FR_le_Char_U_Pi = { holds_landed_title = yes } } - localization_key = CustomLoc_FR_le_Char_P + localization_key = FR_le_Char_P } text = { - localization_key = CustomLoc_FR_le_Char + localization_key = FR_le_Char fallback = yes } } @@ -989,10 +989,10 @@ FR_le_Char_U_P = { trigger = { is_local_player = yes } - localization_key = CustomLoc_FR_empty + localization_key = FR_empty } text = { - localization_key = CustomLoc_FR_le_Char_P + localization_key = FR_le_Char_P fallback = yes } } @@ -1007,10 +1007,10 @@ FR_le_Char_Pi = { holds_landed_title = yes } } - localization_key = CustomLoc_FR_le_Char_P + localization_key = FR_le_Char_P } text = { - localization_key = CustomLoc_FR_le_Char + localization_key = FR_le_Char fallback = yes } } @@ -1025,7 +1025,7 @@ FR_le_Char_P = { any_child = { primary_title.tier = tier_kingdom } primary_title.tier < tier_kingdom } - localization_key = CustomLoc_FR_la + localization_key = FR_la } text = { trigger = { @@ -1044,7 +1044,7 @@ FR_le_Char_P = { } } } - localization_key = CustomLoc_FR_l + localization_key = FR_l } text = { trigger = { # Prince @@ -1056,7 +1056,7 @@ FR_le_Char_P = { } any_parent = { even_if_dead = yes primary_title.tier >= tier_kingdom } } - localization_key = CustomLoc_FR_le + localization_key = FR_le } text = { trigger = { # Princesse @@ -1068,10 +1068,10 @@ FR_le_Char_P = { } any_parent = { even_if_dead = yes primary_title.tier >= tier_kingdom } } - localization_key = CustomLoc_FR_la + localization_key = FR_la } text = { - localization_key = CustomLoc_FR_le_Char + localization_key = FR_le_Char fallback = yes } } @@ -1083,7 +1083,7 @@ FR_le_Char = { trigger = { any_held_title = { is_head_of_faith = yes } } - localization_key = CustomLoc_FR_le + localization_key = FR_le } text = { trigger = { @@ -1291,7 +1291,7 @@ FR_le_Char = { primary_title = title:k_austria # archduke (Archiduc), archduchess (Archiduchesse) } } - localization_key = CustomLoc_FR_l + localization_key = FR_l } text = { trigger = { @@ -1301,7 +1301,7 @@ FR_le_Char = { any_spouse = { primary_title.tier >= tier_barony } } } - localization_key = CustomLoc_FR_le + localization_key = FR_le } text = { trigger = { @@ -1311,10 +1311,10 @@ FR_le_Char = { any_spouse = { primary_title.tier >= tier_barony } } } - localization_key = CustomLoc_FR_la + localization_key = FR_la } text = { - localization_key = CustomLoc_FR_empty + localization_key = FR_empty fallback = yes } } @@ -1327,17 +1327,17 @@ FR_du_Char_L = { holds_landed_title = no is_female = no } - localization_key = CustomLoc_FR_du + localization_key = FR_du } text = { trigger = { holds_landed_title = no is_female = yes } - localization_key = CustomLoc_FR_dela + localization_key = FR_dela } text = { - localization_key = CustomLoc_FR_du_Char + localization_key = FR_du_Char fallback = yes } } @@ -1349,7 +1349,7 @@ FR_du_Char_U_Pi = { trigger = { is_local_player = yes } - localization_key = CustomLoc_FR_de + localization_key = FR_de } text = { trigger = { @@ -1358,10 +1358,10 @@ FR_du_Char_U_Pi = { holds_landed_title = yes } } - localization_key = CustomLoc_FR_du_Char_P + localization_key = FR_du_Char_P } text = { - localization_key = CustomLoc_FR_du_Char + localization_key = FR_du_Char fallback = yes } } @@ -1373,10 +1373,10 @@ FR_du_Char_U_P = { trigger = { is_local_player = yes } - localization_key = CustomLoc_FR_de + localization_key = FR_de } text = { - localization_key = CustomLoc_FR_du_Char_P + localization_key = FR_du_Char_P fallback = yes } } @@ -1391,10 +1391,10 @@ FR_du_Char_Pi = { holds_landed_title = yes } } - localization_key = CustomLoc_FR_du_Char_P + localization_key = FR_du_Char_P } text = { - localization_key = CustomLoc_FR_du_Char + localization_key = FR_du_Char fallback = yes } } @@ -1409,7 +1409,7 @@ FR_du_Char_P = { any_child = { primary_title.tier = tier_kingdom } primary_title.tier < tier_kingdom } - localization_key = CustomLoc_FR_dela + localization_key = FR_dela } text = { trigger = { @@ -1428,7 +1428,7 @@ FR_du_Char_P = { } } } - localization_key = CustomLoc_FR_del + localization_key = FR_del } text = { trigger = { # Prince @@ -1440,7 +1440,7 @@ FR_du_Char_P = { } any_parent = { even_if_dead = yes primary_title.tier >= tier_kingdom } } - localization_key = CustomLoc_FR_du + localization_key = FR_du } text = { trigger = { # Princesse @@ -1452,10 +1452,10 @@ FR_du_Char_P = { } any_parent = { even_if_dead = yes primary_title.tier >= tier_kingdom } } - localization_key = CustomLoc_FR_dela + localization_key = FR_dela } text = { - localization_key = CustomLoc_FR_du_Char + localization_key = FR_du_Char fallback = yes } } @@ -1467,7 +1467,7 @@ FR_du_Char = { trigger = { any_held_title = { is_head_of_faith = yes } } - localization_key = CustomLoc_FR_du + localization_key = FR_du } text = { trigger = { @@ -1675,7 +1675,7 @@ FR_du_Char = { primary_title = title:k_austria # archduke (Archiduc), archduchess (Archiduchesse) } } - localization_key = CustomLoc_FR_del + localization_key = FR_del } text = { trigger = { @@ -1685,7 +1685,7 @@ FR_du_Char = { any_spouse = { primary_title.tier >= tier_barony } } } - localization_key = CustomLoc_FR_du + localization_key = FR_du } text = { trigger = { @@ -1695,10 +1695,10 @@ FR_du_Char = { any_spouse = { primary_title.tier >= tier_barony } } } - localization_key = CustomLoc_FR_dela + localization_key = FR_dela } text = { - localization_key = CustomLoc_FR_de + localization_key = FR_de fallback = yes } } @@ -1711,17 +1711,17 @@ FR_au_Char_L = { holds_landed_title = no is_female = no } - localization_key = CustomLoc_FR_au + localization_key = FR_au } text = { trigger = { holds_landed_title = no is_female = yes } - localization_key = CustomLoc_FR_a_la + localization_key = FR_a_la } text = { - localization_key = CustomLoc_FR_au_Char + localization_key = FR_au_Char fallback = yes } } @@ -1733,7 +1733,7 @@ FR_au_Char_U_Pi = { trigger = { is_local_player = yes } - localization_key = CustomLoc_FR_a_accent + localization_key = FR_a_accent } text = { trigger = { @@ -1742,10 +1742,10 @@ FR_au_Char_U_Pi = { holds_landed_title = yes } } - localization_key = CustomLoc_FR_au_Char_P + localization_key = FR_au_Char_P } text = { - localization_key = CustomLoc_FR_au_Char + localization_key = FR_au_Char fallback = yes } } @@ -1757,10 +1757,10 @@ FR_au_Char_U_P = { trigger = { is_local_player = yes } - localization_key = CustomLoc_FR_a_accent + localization_key = FR_a_accent } text = { - localization_key = CustomLoc_FR_au_Char_P + localization_key = FR_au_Char_P fallback = yes } } @@ -1775,10 +1775,10 @@ FR_au_Char_Pi = { holds_landed_title = yes } } - localization_key = CustomLoc_FR_au_Char_P + localization_key = FR_au_Char_P } text = { - localization_key = CustomLoc_FR_au_Char + localization_key = FR_au_Char fallback = yes } } @@ -1793,7 +1793,7 @@ FR_au_Char_P = { any_child = { primary_title.tier = tier_kingdom } primary_title.tier < tier_kingdom } - localization_key = CustomLoc_FR_a_la + localization_key = FR_a_la } text = { trigger = { @@ -1812,7 +1812,7 @@ FR_au_Char_P = { } } } - localization_key = CustomLoc_FR_a_l + localization_key = FR_a_l } text = { trigger = { # Prince @@ -1824,7 +1824,7 @@ FR_au_Char_P = { } any_parent = { even_if_dead = yes primary_title.tier >= tier_kingdom } } - localization_key = CustomLoc_FR_au + localization_key = FR_au } text = { trigger = { # Princesse @@ -1836,10 +1836,10 @@ FR_au_Char_P = { } any_parent = { even_if_dead = yes primary_title.tier >= tier_kingdom } } - localization_key = CustomLoc_FR_a_la + localization_key = FR_a_la } text = { - localization_key = CustomLoc_FR_au_Char + localization_key = FR_au_Char fallback = yes } } @@ -1851,7 +1851,7 @@ FR_au_Char = { trigger = { any_held_title = { is_head_of_faith = yes } } - localization_key = CustomLoc_FR_au + localization_key = FR_au } text = { trigger = { @@ -2059,7 +2059,7 @@ FR_au_Char = { primary_title = title:k_austria # archduke (Archiduc), archduchess (Archiduchesse) } } - localization_key = CustomLoc_FR_a_l + localization_key = FR_a_l } text = { trigger = { @@ -2069,7 +2069,7 @@ FR_au_Char = { any_spouse = { primary_title.tier >= tier_barony } } } - localization_key = CustomLoc_FR_au + localization_key = FR_au } text = { trigger = { @@ -2079,10 +2079,10 @@ FR_au_Char = { any_spouse = { primary_title.tier >= tier_barony } } } - localization_key = CustomLoc_FR_a_la + localization_key = FR_a_la } text = { - localization_key = CustomLoc_FR_a_accent + localization_key = FR_a_accent fallback = yes } } @@ -2100,10 +2100,10 @@ FR_De_HouseOfWorshipPlural = { has_religion = religion:magyar_religion # egyház } } - localization_key = CustomLoc_FR_d + localization_key = FR_d } text = { - localization_key = CustomLoc_FR_de + localization_key = FR_de fallback = yes } } @@ -2116,172 +2116,172 @@ FR_Scheme_FullAction = { scheme_target_character = { is_local_player = yes } scheme_type = abduct } - localization_key = CustomLoc_FR_Scheme_FullAction_abduct_you + localization_key = FR_Scheme_FullAction_abduct_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = befriend } - localization_key = CustomLoc_FR_Scheme_FullAction_befriend_you + localization_key = FR_Scheme_FullAction_befriend_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = claim_throne } - localization_key = CustomLoc_FR_Scheme_FullAction_claim_throne_you + localization_key = FR_Scheme_FullAction_claim_throne_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = convert_to_witchcraft } - localization_key = CustomLoc_FR_Scheme_FullAction_convert_to_witchcraft_you + localization_key = FR_Scheme_FullAction_convert_to_witchcraft_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = courting } - localization_key = CustomLoc_FR_Scheme_FullAction_courting_you + localization_key = FR_Scheme_FullAction_courting_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = elope } - localization_key = CustomLoc_FR_Scheme_FullAction_elope_you + localization_key = FR_Scheme_FullAction_elope_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = fabricate_hook } - localization_key = CustomLoc_FR_Scheme_FullAction_fabricate_hook_you + localization_key = FR_Scheme_FullAction_fabricate_hook_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = learn_language } - localization_key = CustomLoc_FR_Scheme_FullAction_learn_language_you + localization_key = FR_Scheme_FullAction_learn_language_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = murder } - localization_key = CustomLoc_FR_Scheme_FullAction_murder_you + localization_key = FR_Scheme_FullAction_murder_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = overthrow_regent } - localization_key = CustomLoc_FR_Scheme_FullAction_overthrow_regent_you + localization_key = FR_Scheme_FullAction_overthrow_regent_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = seduce } - localization_key = CustomLoc_FR_Scheme_FullAction_seduce_you + localization_key = FR_Scheme_FullAction_seduce_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = steal_back_artifact } - localization_key = CustomLoc_FR_Scheme_FullAction_steal_back_artifact_you + localization_key = FR_Scheme_FullAction_steal_back_artifact_you } text = { trigger = { scheme_target_character = { is_local_player = yes } scheme_type = sway } - localization_key = CustomLoc_FR_Scheme_FullAction_sway_you + localization_key = FR_Scheme_FullAction_sway_you } text = { trigger = { scheme_type = abduct } - localization_key = CustomLoc_FR_Scheme_FullAction_abduct + localization_key = FR_Scheme_FullAction_abduct } text = { trigger = { scheme_type = befriend } - localization_key = CustomLoc_FR_Scheme_FullAction_befriend + localization_key = FR_Scheme_FullAction_befriend } text = { trigger = { scheme_type = claim_throne } - localization_key = CustomLoc_FR_Scheme_FullAction_claim_throne + localization_key = FR_Scheme_FullAction_claim_throne } text = { trigger = { scheme_type = convert_to_witchcraft } - localization_key = CustomLoc_FR_Scheme_FullAction_convert_to_witchcraft + localization_key = FR_Scheme_FullAction_convert_to_witchcraft } text = { trigger = { scheme_type = courting } - localization_key = CustomLoc_FR_Scheme_FullAction_courting + localization_key = FR_Scheme_FullAction_courting } text = { trigger = { scheme_type = elope } - localization_key = CustomLoc_FR_Scheme_FullAction_elope + localization_key = FR_Scheme_FullAction_elope } text = { trigger = { scheme_type = fabricate_hook } - localization_key = CustomLoc_FR_Scheme_FullAction_fabricate_hook + localization_key = FR_Scheme_FullAction_fabricate_hook } text = { trigger = { scheme_type = learn_language } - localization_key = CustomLoc_FR_Scheme_FullAction_learn_language + localization_key = FR_Scheme_FullAction_learn_language } text = { trigger = { scheme_type = murder } - localization_key = CustomLoc_FR_Scheme_FullAction_murder + localization_key = FR_Scheme_FullAction_murder } text = { trigger = { scheme_type = overthrow_regent } - localization_key = CustomLoc_FR_Scheme_FullAction_overthrow_regent + localization_key = FR_Scheme_FullAction_overthrow_regent } text = { trigger = { scheme_type = seduce } - localization_key = CustomLoc_FR_Scheme_FullAction_seduce + localization_key = FR_Scheme_FullAction_seduce } text = { trigger = { scheme_type = steal_back_artifact } - localization_key = CustomLoc_FR_Scheme_FullAction_steal_back_artifact + localization_key = FR_Scheme_FullAction_steal_back_artifact } text = { trigger = { scheme_type = sway } - localization_key = CustomLoc_FR_Scheme_FullAction_sway + localization_key = FR_Scheme_FullAction_sway } text = { - localization_key = CustomLoc_FR_Scheme_FullAction_fallback + localization_key = FR_Scheme_FullAction_fallback fallback = yes } } @@ -2438,10 +2438,10 @@ FR_Artifact_OnA = { has_variable = islam_hand } } - localization_key = CustomLoc_FR_female_OnA + localization_key = FR_female_OnA } text = { - localization_key = CustomLoc_FR_male_OnA + localization_key = FR_male_OnA fallback = yes } } @@ -2467,7 +2467,7 @@ FR_Le_ArtifactType = { artifact_type = tapestry } } - localization_key = CustomLoc_FR_la + localization_key = FR_la } text = { trigger = { @@ -2489,10 +2489,10 @@ FR_Le_ArtifactType = { artifact_type = sword } } - localization_key = CustomLoc_FR_l + localization_key = FR_l } text = { - localization_key = CustomLoc_FR_le + localization_key = FR_le fallback = yes } } @@ -2518,7 +2518,7 @@ FR_Du_ArtifactType = { artifact_type = tapestry } } - localization_key = CustomLoc_FR_dela + localization_key = FR_dela } text = { trigger = { @@ -2540,10 +2540,10 @@ FR_Du_ArtifactType = { artifact_type = sword } } - localization_key = CustomLoc_FR_del + localization_key = FR_del } text = { - localization_key = CustomLoc_FR_du + localization_key = FR_du fallback = yes } } @@ -2576,10 +2576,10 @@ FR_E_ArtifactType = { artifact_type = tapestry } } - localization_key = CustomLoc_FR_female_E + localization_key = FR_female_E } text = { - localization_key = CustomLoc_FR_empty + localization_key = FR_empty fallback = yes } } @@ -3428,3 +3428,15 @@ FR_GetCourtTypeConcept_Au = { parent = GetCourtTypeConcept suffix = _FR_Au } + +FR_GetChambersOrTent_OnA = { + log_loc_errors = no + parent = GetChambersOrTent + suffix = _FR_On +} + +FR_GetChambersOrTent_Du = { + log_loc_errors = no + parent = GetChambersOrTent + suffix = _FR_Du +} diff --git a/common/customizable_localization/99_ru_custom_loc.txt b/common/customizable_localization/99_ru_custom_loc.txt index 5d6d44df..0adda4b1 100644 --- a/common/customizable_localization/99_ru_custom_loc.txt +++ b/common/customizable_localization/99_ru_custom_loc.txt @@ -1,497 +1,772 @@ -#################################### -# RUSSIAN CUSTOM LOCALISATION # -# By Loktionov Alexander # -#################################### +#################################################### +# RUSSIAN CUSTOM LOCALISATION # +# By Loktionov Alexander & Nikita Shogin # +#################################################### get_region_flower_type_plural_RU_Gen = { log_loc_errors = no parent = get_region_flower_type_plural - suffix = "_RU_Gen" + suffix = _RU_Gen } GetBuildingDwelling_RU_Dat_Pl = { log_loc_errors = no parent = GetBuildingDwelling - suffix = "_RU_Dat_Pl" + suffix = _RU_Dat_Pl } GetCatholicSaint_RU_Dat = { log_loc_errors = no parent = GetCatholicSaint - suffix = "_RU_Dat" + suffix = _RU_Dat } GetChamber_RU_Gen = { log_loc_errors = no parent = GetChamber - suffix = "_RU_Gen" + suffix = _RU_Gen } GetChamber_RU_Inst = { log_loc_errors = no parent = GetChamber - suffix = "_RU_Inst" + suffix = _RU_Inst } GetChamber_RU_Prep = { log_loc_errors = no parent = GetChamber - suffix = "_RU_Prep" + suffix = _RU_Prep } GetChamber_RU_Acc = { log_loc_errors = no parent = GetChamber - suffix = "_RU_Acc" + suffix = _RU_Acc } GetCourt_RU_Gen = { log_loc_errors = no parent = GetCourt - suffix = "_RU_Gen" + suffix = _RU_Gen } GetCourt_RU_Dat = { log_loc_errors = no parent = GetCourt - suffix = "_RU_Dat" + suffix = _RU_Dat } GetCourt_RU_Acc = { log_loc_errors = no parent = GetCourt - suffix = "_RU_Acc" + suffix = _RU_Acc } GetCourt_RU_Inst = { log_loc_errors = no parent = GetCourt - suffix = "_RU_Inst" + suffix = _RU_Inst } -GetCourt_Ru_Prep = { +GetCourt_RU_Prep = { log_loc_errors = no parent = GetCourt - suffix = "_Ru_Prep" + suffix = _Ru_Prep } GetCourt_RU_Where = { log_loc_errors = no parent = GetCourt - suffix = "_RU_Where" + suffix = _RU_Where } GetCourt_RU_WhereTo = { log_loc_errors = no parent = GetCourt - suffix = "_RU_WhereTo" + suffix = _RU_WhereTo } GetCourt_RU_WhereFrom = { log_loc_errors = no parent = GetCourt - suffix = "_RU_WhereFrom" + suffix = _RU_WhereFrom } GetCourtyard_RU_Gen = { log_loc_errors = no parent = GetCourtyard - suffix = "_RU_Gen" + suffix = _RU_Gen } GetCourtyard_RU_Dat = { log_loc_errors = no parent = GetCourtyard - suffix = "_RU_Dat" + suffix = _RU_Dat } GetCourtyard_RU_Inst = { log_loc_errors = no parent = GetCourtyard - suffix = "_RU_Inst" + suffix = _RU_Inst } GetCourtyard_Ru_Prep = { log_loc_errors = no parent = GetCourtyard - suffix = "_Ru_Prep" + suffix = _Ru_Prep } GetCourtyard_RU_Where = { log_loc_errors = no parent = GetCourtyard - suffix = "_RU_Where" + suffix = _RU_Where } GetCourtyard_RU_WhereTo = { log_loc_errors = no parent = GetCourtyard - suffix = "_RU_WhereTo" + suffix = _RU_WhereTo } GetCourtyard_RU_WhereFrom = { log_loc_errors = no parent = GetCourtyard - suffix = "_RU_WhereFrom" + suffix = _RU_WhereFrom } GetCourtierPlural_RU_Gen = { log_loc_errors = no parent = GetCourtierPlural - suffix = "_RU_Gen" + suffix = _RU_Gen } GetCourtierPlural_RU_Dat = { log_loc_errors = no parent = GetCourtierPlural - suffix = "_RU_Dat" + suffix = _RU_Dat } GetCourtierPlural_RU_Acc = { log_loc_errors = no parent = GetCourtierPlural - suffix = "_RU_Acc" + suffix = _RU_Acc } GetCourtierPlural_RU_Inst = { log_loc_errors = no parent = GetCourtierPlural - suffix = "_RU_Inst" + suffix = _RU_Inst } GetCourtierPlural_RU_Prep = { log_loc_errors = no parent = GetCourtierPlural - suffix = "_RU_Prep" + suffix = _RU_Prep } GetDoor_RU_Acc = { log_loc_errors = no parent = GetDoor - suffix = "_RU_Acc" + suffix = _RU_Acc } GetDungeon_RU_Gen = { log_loc_errors = no parent = GetDungeon - suffix = "_RU_Gen" + suffix = _RU_Gen } GetDungeon_RU_Acc = { log_loc_errors = no parent = GetDungeon - suffix = "_RU_Acc" + suffix = _RU_Acc } GetExpensiveMeal_RU_Acc = { log_loc_errors = no parent = GetExpensiveMeal - suffix = "_RU_Acc" + suffix = _RU_Acc } GetExpensiveMealAlt_RU_Acc = { log_loc_errors = no parent = GetExpensiveMealAlt - suffix = "_RU_Acc" + suffix = _RU_Acc } GetMainsquareCommons_RU_Gen = { log_loc_errors = no parent = GetMainsquareCommons - suffix = "_RU_Gen" + suffix = _RU_Gen } GetMainsquareCommons_RU_Dat = { log_loc_errors = no parent = GetMainsquareCommons - suffix = "_RU_Dat" + suffix = _RU_Dat } GetMainsquareCommons_RU_Acc = { log_loc_errors = no parent = GetMainsquareCommons - suffix = "_RU_Acc" + suffix = _RU_Acc } GetMainsquareCommons_RU_Prep = { log_loc_errors = no parent = GetMainsquareCommons - suffix = "_RU_Prep" + suffix = _RU_Prep } GetProvinceConcept_RU_Prep = { log_loc_errors = no parent = GetProvinceConcept - suffix = "_RU_Prep" + suffix = _RU_Prep } GetRealmOrDomicile_RU_Gen = { log_loc_errors = no parent = GetRealmOrDomicile - suffix = "_RU_Gen" + suffix = _RU_Gen } GetRealmOrDomicile_RU_Acc = { log_loc_errors = no parent = GetRealmOrDomicile - suffix = "_RU_Acc" + suffix = _RU_Acc } GetRealmOrDomicile_RU_Prep = { log_loc_errors = no parent = GetRealmOrDomicile - suffix = "_RU_Prep" + suffix = _RU_Prep } GetRoom_RU_Gen = { log_loc_errors = no parent = GetRoom - suffix = "_RU_Gen" + suffix = _RU_Gen } GetRoom_RU_Dat = { log_loc_errors = no parent = GetRoom - suffix = "_RU_Dat" + suffix = _RU_Dat } GetRoom_RU_Acc = { log_loc_errors = no parent = GetRoom - suffix = "_RU_Acc" + suffix = _RU_Acc } GetRoom_RU_Inst = { log_loc_errors = no parent = GetRoom - suffix = "_RU_Inst" + suffix = _RU_Inst } GetRoom_RU_Prep = { log_loc_errors = no parent = GetRoom - suffix = "_RU_Prep" + suffix = _RU_Prep } GetRoomTent_RU_Gen = { log_loc_errors = no parent = GetRoomTent - suffix = "_RU_Gen" + suffix = _RU_Gen } GetRoomTent_RU_Prep = { log_loc_errors = no parent = GetRoomTent - suffix = "_RU_Prep" + suffix = _RU_Prep } GetSchemeContract_RU_Gen = { log_loc_errors = no parent = GetSchemeContract - suffix = "_RU_Gen" + suffix = _RU_Gen } GetSchemeContract_RU_Dat = { log_loc_errors = no parent = GetSchemeContract - suffix = "_RU_Dat" + suffix = _RU_Dat } GetSchemeContract_RU_Acc = { log_loc_errors = no parent = GetSchemeContract - suffix = "_RU_Acc" + suffix = _RU_Acc } GetSchemeContract_RU_Inst = { log_loc_errors = no parent = GetSchemeContract - suffix = "_RU_Inst" + suffix = _RU_Inst } GetSchemeContract_RU_Prep = { log_loc_errors = no parent = GetSchemeContract - suffix = "_RU_Prep" + suffix = _RU_Prep } GetSchemeType_RU_Gen = { log_loc_errors = no parent = GetSchemeType - suffix = "_RU_Gen" + suffix = _RU_Gen } GetSchemeType_RU_Prep = { log_loc_errors = no parent = GetSchemeType - suffix = "_RU_Prep" + suffix = _RU_Prep } GetServants_RU_Gen = { log_loc_errors = no parent = GetServants - suffix = "_RU_Gen" + suffix = _RU_Gen } GetServants_RU_Dat = { log_loc_errors = no parent = GetServants - suffix = "_RU_Dat" + suffix = _RU_Dat } GetServants_RU_Acc = { log_loc_errors = no parent = GetServants - suffix = "_RU_Acc" + suffix = _RU_Acc } GetServants_RU_Inst = { log_loc_errors = no parent = GetServants - suffix = "_RU_Inst" + suffix = _RU_Inst } GetServants_RU_Prep = { log_loc_errors = no parent = GetServants - suffix = "_RU_Prep" + suffix = _RU_Prep } GetSquareCommons_RU_Gen = { log_loc_errors = no parent = GetSquareCommons - suffix = "_RU_Gen" + suffix = _RU_Gen } GetSquareCommons_RU_Prep = { log_loc_errors = no parent = GetSquareCommons - suffix = "_RU_Prep" + suffix = _RU_Prep } GetTavernDwelling_RU_Acc = { log_loc_errors = no parent = GetTavernDwelling - suffix = "_RU_Acc" + suffix = _RU_Acc } GetTavernDwelling_RU_Prep = { log_loc_errors = no parent = GetTavernDwelling - suffix = "_RU_Prep" + suffix = _RU_Prep } GetTaverngoersTribespeople_RU_Gen = { log_loc_errors = no parent = GetTaverngoersTribespeople - suffix = "_RU_Gen" + suffix = _RU_Gen } GetTaverngoersTribespeople_RU_Inst = { log_loc_errors = no parent = GetTaverngoersTribespeople - suffix = "_RU_Inst" + suffix = _RU_Inst } GetTowncrierElder_RU_Gen = { log_loc_errors = no parent = GetTowncrierElder - suffix = "_RU_Gen" + suffix = _RU_Gen } GetTowncrierElder_RU_Dat = { log_loc_errors = no parent = GetTowncrierElder - suffix = "_RU_Dat" + suffix = _RU_Dat } GetTreesScaffolding_RU_Prep = { log_loc_errors = no parent = GetTreesScaffolding - suffix = "_RU_Prep" + suffix = _RU_Prep } KnightCultureNoTooltip_RU_Gen = { log_loc_errors = no parent = KnightCultureNoTooltip - suffix = "_RU_Gen" + suffix = _RU_Gen } LocalHoldingType_RU_Gen = { log_loc_errors = no parent = LocalHoldingType - suffix = "_RU_Gen" + suffix = _RU_Gen } RegionalFarmAnimalPlural_RU_Gen = { log_loc_errors = no parent = RegionalFarmAnimalPlural - suffix = "_RU_Gen" + suffix = _RU_Gen } ResidenceBuilding_RU_Prep = { log_loc_errors = no parent = ResidenceBuilding - suffix = "_RU_Prep" + suffix = _RU_Prep } ResidenceBuilding_RU_Gen = { log_loc_errors = no parent = ResidenceBuilding - suffix = "_RU_Gen" + suffix = _RU_Gen } ResidenceBuilding_RU_Acc = { log_loc_errors = no parent = ResidenceBuilding - suffix = "_RU_Acc" + suffix = _RU_Acc } SettlementCity_RU_Gen = { log_loc_errors = no parent = SettlementCity - suffix = "_RU_Gen" + suffix = _RU_Gen } GetCourtier_RU_Acc = { log_loc_errors = no parent = GetCourtier - suffix = "_RU_Acc" + suffix = _RU_Acc } GetCourtierConcept_RU_Acc = { log_loc_errors = no parent = GetCourtierConcept - suffix = "_RU_Acc" + suffix = _RU_Acc } GetCourtConcept_RU_Where = { log_loc_errors = no parent = GetCourtConcept - suffix = "_RU_Where" + suffix = _RU_Where } GetRealmOrDomicile_RU_Inst = { log_loc_errors = no parent = GetRealmOrDomicile - suffix = "_RU_Inst" + suffix = _RU_Inst } GetContractOrIssue_RU_Gen = { log_loc_errors = no parent = GetContractOrIssue - suffix = "_RU_Gen" + suffix = _RU_Gen } GetCourtOwnerConcept_RU_Gen = { log_loc_errors = no parent = GetCourtOwnerConcept - suffix = "_RU_Gen" + suffix = _RU_Gen } GetAdventurerType_RU_Gen = { log_loc_errors = no parent = GetAdventurerType - suffix = "_RU_Gen" -} \ No newline at end of file + suffix = _RU_Gen +} + +RegionalPoxAnimal_RU_Gen = { + log_loc_errors = no + parent = RegionalPoxAnimal + suffix = _RU_Gen +} +RegionalPoxAnimal_RU_Dat = { + log_loc_errors = no + parent = RegionalPoxAnimal + suffix = _RU_Dat +} +RegionalPoxAnimal_RU_Acc = { + log_loc_errors = no + parent = RegionalPoxAnimal + suffix = _RU_Acc +} +RegionalPoxAnimal_RU_Inst = { + log_loc_errors = no + parent = RegionalPoxAnimal + suffix = _RU_Inst +} +RegionalPoxAnimal_RU_Prep = { + log_loc_errors = no + parent = RegionalPoxAnimal + suffix = _RU_Prep +} +RegionalPoxAnimal_RU_ADJ = { + log_loc_errors = no + parent = RegionalPoxAnimal + suffix = _RU_ADJ +} +GetLegendaryColor_RU_TRUNC = { + log_loc_errors = no + parent = GetLegendaryColor + suffix = _RU_TRUNC +} + +ArtifactAnimalType_RU_Gen = { + log_loc_errors = no + parent = ArtifactAnimalType + suffix = _RU_Gen +} +ArtifactAnimalType_RU_Dat = { + log_loc_errors = no + parent = ArtifactAnimalType + suffix = _RU_Dat +} +ArtifactAnimalType_RU_Acc = { + log_loc_errors = no + parent = ArtifactAnimalType + suffix = _RU_Acc +} +ArtifactAnimalType_RU_Inst = { + log_loc_errors = no + parent = ArtifactAnimalType + suffix = _RU_Inst +} +ArtifactAnimalType_RU_Prep = { + log_loc_errors = no + parent = ArtifactAnimalType + suffix = _RU_Prep +} + +GetAnimalType_RU_Nom_END = { + log_loc_errors = no + parent = GetAnimalType + suffix = _RU_Nom_END +} +GetAnimalType_RU_Gen_END = { + log_loc_errors = no + parent = GetAnimalType + suffix = _RU_Gen_END +} +GetAnimalType_RU_Dat_END = { + log_loc_errors = no + parent = GetAnimalType + suffix = _RU_Dat_END +} +GetAnimalType_RU_Acc_END = { + log_loc_errors = no + parent = GetAnimalType + suffix = _RU_Acc_END +} +GetAnimalType_RU_Gen = { + log_loc_errors = no + parent = GetAnimalType + suffix = _RU_Gen +} +GetAnimalType_RU_Dat = { + log_loc_errors = no + parent = GetAnimalType + suffix = _RU_Dat +} +GetAnimalType_RU_Acc = { + log_loc_errors = no + parent = GetAnimalType + suffix = _RU_Acc +} +GetAnimalType_RU_Inst = { + log_loc_errors = no + parent = GetAnimalType + suffix = _RU_Inst +} +GetAnimalType_RU_Prep = { + log_loc_errors = no + parent = GetAnimalType + suffix = _RU_Prep +} +GetAnimalTypeKill_RU_Gen = { + log_loc_errors = no + parent = GetAnimalTypeKill + suffix = _RU_Gen +} +GetAnimalTypeKill_RU_Dat = { + log_loc_errors = no + parent = GetAnimalTypeKill + suffix = _RU_Dat +} +GetAnimalTypeKill_RU_Acc = { + log_loc_errors = no + parent = GetAnimalTypeKill + suffix = _RU_Acc +} +GetAnimalTypeKill_RU_Inst = { + log_loc_errors = no + parent = GetAnimalTypeKill + suffix = _RU_Inst +} +GetAnimalTypeKill_RU_Prep = { + log_loc_errors = no + parent = GetAnimalTypeKill + suffix = _RU_Prep +} +GetAnimalAdjective_RU_END = { + log_loc_errors = no + parent = GetAnimalAdjective + suffix = _RU_END +} +GetAnimalColor_RU_END = { + log_loc_errors = no + parent = GetAnimalColor + suffix = _RU_END +} +GetCourtPositionPlural_RU_WC = { + log_loc_errors = no + parent = GetCourtPositionPlural + suffix = _RU_WC +} + +DistantLandsTerrainTypeLoc_RU_Gen = { + log_loc_errors = no + parent = DistantLandsTerrainTypeLoc + suffix = RU_Gen +} + +GetBrideGroom_RU_Gen = { + log_loc_errors = no + parent = GetBrideGroom + suffix = RU_Gen +} + +GetProvincialArmyConcept_RU_Gen = { + log_loc_errors = no + parent = GetProvincialArmyConcept + suffix = RU_Gen +} + +GetRandomAppropriateTree_RU_Gen_Pl = { + log_loc_errors = no + parent = GetRandomAppropriateTree + suffix = RU_Gen_Pl +} + +GetClothingArticle_RU_Acc_Pl = { + log_loc_errors = no + parent = GetClothingArticle + suffix = RU_Acc_Pl +} + +RegionalFerociousAnimal_RU_Gen_Pl = { + log_loc_errors = no + parent = RegionalFerociousAnimal + suffix = RU_Gen_Pl +} + +get_region_flower_type_RU_Gen = { + log_loc_errors = no + parent = get_region_flower_type + suffix = RU_Gen +} + +OutdoorsHidingPlace_RU_Gen = { + log_loc_errors = no + parent = OutdoorsHidingPlace + suffix = RU_Gen +} + + +GetDungeon_RU_Prep = { + log_loc_errors = no + parent = GetDungeon + suffix = _RU_Prep +} + +GetRealmOrDomicile_RU_Ins = { + log_loc_errors = no + parent = GetRealmOrDomicile + suffix = _RU_Ins +} + +FortifiedBuilding_RU_Gen = { + log_loc_errors = no + parent = FortifiedBuilding + suffix = _RU_Gen +} + +ResidenceBuilding_RU_Where = { + log_loc_errors = no + parent = ResidenceBuilding + suffix = _RU_Where +} + +GetTavernDwelling_RU_Gen = { + log_loc_errors = no + parent = GetTavernDwelling + suffix = _RU_Gen +} + +GetSquareCommons_RU_Acc = { + log_loc_errors = no + parent = GetSquareCommons + suffix = _RU_Acc +} + +GetContractOrIssue_RU_Acc = { + log_loc_errors = no + parent = GetContractOrIssue + suffix = _RU_Acc +} + +ArtifactAnimalAdjective_RU_TRUNC = { + log_loc_errors = no + parent = ArtifactAnimalAdjective + suffix = _RU_TRUNC +} + +GetChamberPlural_RU_Prep = { + log_loc_errors = no + parent = GetChamberPlural + suffix = _RU_Prep +} + +GetRoomPlural_RU_Prep = { + log_loc_errors = no + parent = GetRoomPlural + suffix = _RU_Prep +} + +GetCourtierPlural_RU_Ins = { + log_loc_errors = no + parent = GetCourtierPlural + suffix = _RU_Ins +} + +GetDungeonPlural_RU_Prep = { + log_loc_errors = no + parent = GetDungeonPlural + suffix = _RU_Prep +} + +GetFollowerOrVassalPlural_RU_Prep = { + log_loc_errors = no + parent = GetFollowerOrVassalPlural + suffix = _RU_Prep +} diff --git a/common/decisions/major_decisions_NEOW.txt b/common/decisions/major_decisions_NEOW.txt index 253bc595..03db1c87 100644 --- a/common/decisions/major_decisions_NEOW.txt +++ b/common/decisions/major_decisions_NEOW.txt @@ -27,7 +27,7 @@ restore_european_union_decision = { } OR = { government_has_flag = government_is_feudal - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic government_has_flag = government_is_clan has_government = administrative_government } @@ -91,7 +91,7 @@ restore_european_union_decision = { resolve_title_and_vassal_change = scope:change if = { # Move your Title MaAs to your new title if you have any limit = { - government_allows = administrative + government_has_flag = government_is_administrative primary_title = { any_title_maa_regiment = { count >= 1 } } diff --git a/common/defines/00_defines.txt b/common/defines/00_defines.txt index a79cb343..84c5b731 100644 --- a/common/defines/00_defines.txt +++ b/common/defines/00_defines.txt @@ -76,6 +76,15 @@ NJominiMap = { WATERLEVEL = 3.8 } +NSkills = { + MAX_DIPLOMACY = 100 # Maximum possible diplomacy skill points per character + MAX_MARTIAL = 100 # Maximum possible martial skill points per character + MAX_STEWARDSHIP = 100 # Maximum possible stewardship skill points per character + MAX_INTRIGUE = 100 # Maximum possible intrigue skill points per character + MAX_LEARNING = 100 # Maximum possible learning skill points per character + MAX_PROWESS = 100 # Maximum possible prowess skill points per character +} + NCharacter = { # values for randomly generated characters they'll be set to BASE + random within SPAN MALE_RANDOM_AGE_BASE = 16 @@ -120,6 +129,19 @@ NCharacter = { MAX_PROVISIONS = 2500 # maximum provisions value a character can have PROVISIONS_LOW_WARNING = 500 # when travel planner should warn about provisions running low + BASE_HERD_CONVERSION_RATE = 0.15 # base herd conversion rate + BASE_HERD_CAPACITY = { # base herd capacity for different title tiers + 0 # Unlanded + 500 # Barony + 3000 # County + 5000 # Duchy + 15000 # Kingdom + 20000 # Empire + } + GOLD_FROM_HERD_FACTOR = 0.0005 # The amount of herd that provides monthly gold income + + BASE_HERDER_GAIN_PER_COUNTY = 1.0 # Base monthly herd gain for herders | ( NCountyData::MAX_COUNTY_FERTILITY / CountyFertility) * BASE_HERDER_GAIN_PER_COUNTY + MAX_STRIFE_OPINION = 100 # maximum strife opinion value a character can have STRIFE_OPINION_MONTHLY_CHANGE = -0.2 # strife opinion is changing by this value each month @@ -463,8 +485,10 @@ NCharacterOpinion = { EMPIRE_IS_VALID_DE_JURE_LIEGE_FOR_DUCHY = yes # Dukes won't be upset as the vassal of their dejure emperor PARTIALLY_NON_RIGHTFUL_LIEGE_TAX_MULT = 0.75 # Tax mult when partially non-rightful liege (liege doesn't hold dejure liege title of the vassal's primary, or empire for a duke if EMPIRE_IS_VALID_DE_JURE_LIEGE_FOR_DUCHY) PARTIALLY_NON_RIGHTFUL_LIEGE_LEVY_MULT = 0.75 # Tax mult when partially non-rightful liege + PARTIALLY_NON_RIGHTFUL_LIEGE_HERD_MULT = 1 # Herd mult when partially non-rightful liege NON_RIGHTFUL_LIEGE_TAX_MULT = 0.5 # Tax mult when non-rightful liege (liege doesn't hold *any* dejure liege title) NON_RIGHTFUL_LIEGE_LEVY_MULT = 0.5 # Tax mult when non-rightful liege + NON_RIGHTFUL_LIEGE_HERD_MULT = 0.5 # Herd mult when non-rightful liege PARTIALLY_NON_RIGHTFUL_LIEGE_OPINION = -5 # Opinion penalty for being non-rightful liege NON_RIGHTFUL_LIEGE_OPINION = -5 # Opinion penalty for being partially non-rightful liege MAX_DUCHIES_BEFORE_PENALTY = 2 # How many duchies are vassals fine with you having? If you're a duke, they don't care; only if you're king or above @@ -505,7 +529,7 @@ NCombat = { MANEUVER_PHASE_DAYS = 3 # How many days should the maneuver phase last LEVY_TOUGHNESS = 13 # How much toughness does each levy soldier have LEVY_ATTACK = 13 # How much attack does each levy soldier have - LEVY_SIEGE = 0.01 # How much siege bonus does each levy soldier have + LEVY_SIEGE = 0.01 # How much siege bonus does each levy soldier have LEVY_PURSUIT = 1 # How much pursuit does each levy soldier have LEVY_SCREEN = 1 # How much screen does each levy soldier have DAMAGE_SCALING_FACTOR = 0.03 # Scaling factor for dealing damage in combat @@ -526,7 +550,7 @@ NCombat = { BASE_TOUGHNESS_TO_PURSUIT = 0.05 # This many % of the toughness of the retreater's soft casualties will turn into pursuit (during the full pursuit, not per day). Essentially, this means if neither side has screen or pursuit, 5% of the soft casualties will become hard casualties. More if the pursuer has more pursuit than the defender has screen, and vice versa MINIMUM_PURSUIT_DAMAGE = 0.01 # High screen can't bring casualties below 1% in the pursuit phase DISEMBARK_PENALTY_DAYS = 30 # How long does an army have a penalty after disembarking? - KNIGHT_DAMAGE_PER_PROWESS = 50 # How much "Damage" stat does a knight get per prowess? + KNIGHT_DAMAGE_PER_PROWESS = 30 # How much "Damage" stat does a knight get per prowess? KNIGHT_TOUGHNESS_PER_PROWESS = 8 # How much "Toughness" stat does a knight get per prowess? ### Brief: KNIGHT_AVERAGE_PROWESS_FOR_AI_POWER_CALCULATION ( int32 ) @@ -599,6 +623,9 @@ NArmy = { MINIMUM_HIRING_COST_MULTIPLIER = 0.1 # The cost of hiring after modifiers are applied can't go below this multiplier of the original value. To prevent negative costs, and therefore getting paid for hiring. MIN_PERSONAL_MAA_MAINTENANCE_RATIO = 0.4 # Relevant for characters with theme armies. Out of your total MaA maintenance, at least this much should go towards your personal MaA. LANDLESS_RAISE_TROOPS_MAX_DISTANCE = 500 # Max diatance for landless rulers to raise their troops if their capital location is blocked by hostilities + + NOMADIC_HORDE_CONVERSION_BASE_DISCOUNT = 0.5 # Base discount rate applied to MaA cost when converting Horde regiments into permanent MaA as a Nomad + NOMADIC_RIDERS_MAX_SIZE = 500 # Max size of Horde Riders when they are raised } NFleet = { @@ -649,6 +676,7 @@ NWar = { MINIMUM_CONTRIBUTION_FOR_REWARD = 100 # You need at least this amount of contribution points in order to get a reward WAR_RESULT_MONTHS_TO_TIMEOUT = 12 # War results time out after this many months AI_USE_VASSAL_OF_VASSAL_CLAIMS = no # If this is set to "no", the AI will never push the claims of vassals of vassals + AI_WAR_STANCE_WEIGHT_CUTOFF = 10 # War stances with less than this weight will not be considered by the AI. } NScheme = { @@ -861,6 +889,15 @@ NCounty = { COUNTY_CONTROL_LOSS_ON_HOSTILE_OWNER_CHANGE = 75 # County control is reduced by this amount when the county changes hands due to conquest ABSOLUTE_COUNTRY_CONTROL = 110 CULTURAL_ACCEPTANCE_AUTO_GRANT_COUNTY_SCRIPT_VALUE = "auto_grant_county_cultural_acceptance_impact" + COUNTY_FERTILITY_GROWTH_HERDER = 0 # For clearer tooltips, moved to holdings + CAPITAL_COUNTY_FERTILITY_DECLINE_NOMAD = 0 # For clearer tooltips, moved to holdings + CAPITAL_COUNTY_FERTILITY_DECLINE_NOMAD_CAPITAL = 0 # For clearer tooltips, moved to holdings + COUNTY_FERTILITY_GROWTH_FACTOR = 0.125 # Makes all county fertility growth modifiers give out more adjusted growth. 1.1 = 10% stronger growth. Moves equilibriums + COUNTY_FERTILITY_DECLINE_FACTOR = 0.125 # Makes all county fertility decline modifiers give out more adjusted growth. 1.1 = 10% stronger decline. Moves equilibriums + COUNTY_FERTILITY_EQUILIBRIUM_FACTOR = 0.09 # 0.007 # Factor value for how sensitive the fertility equilibrium is towards small changes. Inverted in calculations: the lower the value the more sensitive the behavior. Set to 100 to have a clear curve. + COUNTY_FERTILITY_MONTHLY_CHANGE_LEVELS = { -20 -0.01 0.01 20 } + COUNTY_FERTILITY_NON_NOMAD_HOLDING_MALUS = -0.75 # Negative mult malus applied to the amount of Herd gained from the county fertility in a county that does not have a Nomad or Herder Holding + HERD_GAIN_FROM_COUNTY_MULTIPLIER = 0.5 # Direct multiplier on the base Herd gained from County ( Base Gain = CountyFertility * HERD_GAIN_FROM_COUNTY_MULTIPLIER ) } NProvince = { @@ -879,6 +916,7 @@ NProvince = { WINTER_SEVERITY_DEFAULT_BIAS = 0.1 # Default bias used when determining winter on a province that doesn't have a bias set explicitely WINTER_SEVERITY_RANDOM_MIN = 0.5 # Sets the lower bound of the random value that is used when determining the next winter severity WINTER_SEVERITY_RANDOM_MAX = 1.0 # Sets the upper bound of the random value that is used when determining the next winter severity + RAZE_HOLDING_COOLDOWN_YEARS = 5 # Sets the cooldown perid in years for nomads razing holdings that they completely control } NText = { @@ -941,6 +979,8 @@ NDomain = { ABOVE_LIMIT_MAX_LEVY_PENALTY = 1 # How much levies can be reduced at most ABOVE_LIMIT_TAX_INCOME_PENALTY = 0.2 # How much tax income from domain is reduced per holding over the limit ABOVE_LIMIT_MAX_TAX_INCOME_PENALTY = 1 # How much tax income from domain can be reduced at most + ABOVE_LIMIT_HERD_INCOME_PENALTY = 0.5 # How much herd income from domain is reduced per holding over the limit + ABOVE_LIMIT_MAX_HERD_INCOME_PENALTY = 1 # How much herd income from domain can be reduced at most HOLDING_GRACE_PERIOD = 365 # How many days do newly gained holdings not count towards the domain size for the purposes of penalties (but also not produce any levies) STEWARDSHIP_SKILL_FOR_DOMAIN_LIMIT_INCREASE = 6 # domain limit += floor( / STEWARDSHIP_SKILL_FOR_DOMAIN_LIMIT_INCREASE ) LEVIES_AT_ZERO_COUNTY_CONTROL = 0.5 # How many % levies do you get at 0 county control? Interpolated between this value and 100% when between 0 and 100 @@ -994,7 +1034,7 @@ NCulture = { # If the random roll succeeds, the innovation will progress by: # base + from development + from eras ahead INNOVATION_PROGRESS_GAIN_BASE = 0.3 - INNOVATION_PROGRESS_GAIN_PER_AVERAGE_DEVELOPMENT_LEVEL = 0.08 + INNOVATION_PROGRESS_GAIN_PER_AVERAGE_DEVELOPMENT_LEVEL = 0.1 INNOVATION_PROGRESS_GAIN_PER_ERA_AHEAD = 0.2 MINIMUM_DYNASTY_NAMES = 2 # We'll log an error for any culture with less dynasty names than this. Dynasty names from the culture group will count @@ -1023,6 +1063,8 @@ NCulture = { REFORMATION_PROGRESS_SLOWDOWN_PER_COUNTY_WITH_CULTURE = 0.2 # How much slower is the reformation per county with the culture. The final progress is calculated: (TotalGain) / (NrCounties * SlowdownFactor) REFORMATION_PROGRESS_REPLACE_TRADITION_MULT = 0.75 # A multiplier to the total progress when replacing traditions. REFORMATION_MAX_YEARS = 30 # The slowdown per county will be capped at a value that limits the max years a reformation can take to this value. Replacing traditions will go over this limit. + + MILITARY_STRENGTH_IMPORTANCE_FOR_CULTURE_HEAD_FROM_HERD = 0.1 # A rulers max military strength is multiplied by this as a factor of the determination of the culture head from herd - to avoid scenarios where there is no culture head in herd cultures that no longer use herd for some reason } NMercenary = { @@ -1038,7 +1080,9 @@ NMercenary = { SIZE_INNOVATIONS_RATIO = 1.0 # How much are mercenary companies growing with the ratio of discovered to all cultural innovations of the culture. 1.0 means +100% # if SIZE_INNOVATIONS_RATIO = 2, the mercenaries will be 3x their original size if all innovations are discovered - HIRE_MONTHS = 36 # The length of the period mercenaries are hired for in months + BASE_HIRE_MONTHS = 36 # The base length of the period mercenaries are hired for in months + MIN_HIRE_MONTHS = 11 # Minimum length of time mercenaries can be hired for in months + MAX_HIRE_MONTHS = 108 # Maximum length of time mercenaries can be hired for in months LEVY_COST_PER_100_SOLDIERS = 12.0 # The cost of the levy regiment part of mercenary companies, per 100 soldiers for better precision MAA_COST_RATIO = 0.5 # The cost of the MAA regiments of mercenary companies as a fraction of what those regiments cost when buying them @@ -1097,12 +1141,16 @@ NCourt = { GENERATED_SPOUSES_DUCHY = 0 GENERATED_SPOUSES_KINGDOM = 0 GENERATED_SPOUSES_EMPIRE = 0 + + # Commanders multiplied by court_generate_commanders defined in 00_government_types.txt GENERATED_COMMANDERS_BARONY_PER_HOLDING_KEYS = {} GENERATED_COMMANDERS_BARONY_PER_HOLDING_VALUES = {} GENERATED_COMMANDERS_COUNTY = 0 GENERATED_COMMANDERS_DUCHY = 0 GENERATED_COMMANDERS_KINGDOM = 0 GENERATED_COMMANDERS_EMPIRE = 0 + GENERATED_COMMANDERS_MERCENARY_COMPANY = 1 + GENERATED_COMMANDERS_HOLY_ORDER = 1 # When a courtier has decided to leave, they will stay this much longer to give the liege the opportunity to make them stay COURTIER_MOVE_TO_POOL_DELAY_MONTHS = 2 @@ -1122,7 +1170,7 @@ NCourt = { MAX_GUESTS_TO_GENERATE = 2 } -NVassalContract = { +NSubjectContract = { OPINION_OF_LIEGE_UPDATE_INTERVAL = 30 # Interval in days - how often should the vassal's opinion of liege update for vassal contracts which use it CHECK_OBLIGATION_VALIDITY_INTERVAL = 30 # Interval in days - how often should the selected obligation levels be validated for contracts with obligation level @@ -1132,6 +1180,12 @@ NVassalContract = { ABOVE_LIMIT_MAX_LEVY_PENALTY = 0.95 # How much levies can be reduced at most ABOVE_LIMIT_TAX_INCOME_PENALTY = 0.05 # How much tax income from domain is reduced per vassal over the limit ABOVE_LIMIT_MAX_TAX_INCOME_PENALTY = 0.95 # How much tax income from domain can be reduced at most + ABOVE_LIMIT_HERD_INCOME_PENALTY = 0.05 # How much herd income from domain is reduced per vassal over the limit + ABOVE_LIMIT_MAX_HERD_INCOME_PENALTY = 0.95 # How much herd income from domain can be reduced at most + + CEASE_PAYING_TRIBUTE_LABEL_LEVELS = { 10 25 100 } + + MEN_AT_ARMS_RECRUITMENT_COST_MULT = 0.5 # How much greater the cost is when recruiting MaAs from tributaries rather than directly } NGUI = { @@ -1154,6 +1208,7 @@ NGUI = { DEFAULT_FRONT_END_BACKGROUND = "main_menu/frontend_west.dds" # relative to the illustrations folder DYNASTY_TREE_MAX_SIZE = 200 # Limit initial number of character in single dynasty tree PRISONER_MASS_ACTION_REASONS = 5 # maximum number of reasons why a mass prisoner action cannot be done that we want to show in tooltips + DECISION_LIST_UPDATE_TIME = 0.25 # Time between decision list window updates, in seconds } NSuggestions = { @@ -1163,7 +1218,7 @@ NSuggestions = { } NModifier = { - HEALTH_VALUE_FORMAT_THRESHOLDS = { -6 -4.5 -3 -1 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 1 2 } # Thresholds to select the key in HEALTH_VALUE_FORMAT_KEYS + HEALTH_VALUE_FORMAT_THRESHOLDS = { -6 -4.5 -3 -1 -0.75 -0.5 -0.25 0 0.09 0.25 0.5 0.75 1 2 } # Thresholds to select the key in HEALTH_VALUE_FORMAT_KEYS HEALTH_VALUE_FORMAT_KEYS = { "HEALTH_VALUE_FORMAT_ALREADY_DEAD" "HEALTH_VALUE_FORMAT_CATASTROPHIC_PENALTY" @@ -1173,6 +1228,7 @@ NModifier = { "HEALTH_VALUE_FORMAT_MODERATE_PENALTY" "HEALTH_VALUE_FORMAT_MINOR_PENALTY" "HEALTH_VALUE_FORMAT_TINY_PENALTY" + "HEALTH_VALUE_FORMAT_TINY_BOOST" "HEALTH_VALUE_FORMAT_SMALL_BOOST" "HEALTH_VALUE_FORMAT_MEDIUM_BOOST" "HEALTH_VALUE_FORMAT_SIGNIFICANT_BOOST" @@ -1181,9 +1237,10 @@ NModifier = { "HEALTH_VALUE_FORMAT_GODLIKE_BOOST" } STANDARD_MINIMUM_VALUE = 0.1 # Some modifiers are not allowed to reduce whatever they're affecting to below 10% + AVERAGE_PROWESS_VALUE = 10 # Used by character_opinion_from_high_prowess_add and character_opinion_from_low_prowess_add modifiers to determine what's high and low } NPortrait = { - GENE_DATABASE_VERSION = 3 # If the version saved in a file does not match this number, the portrait DNAs will get regenerated. Increase this number when making gene database changed that would break old portraits. + GENE_DATABASE_VERSION = 4 # If the version saved in a file does not match this number, the portrait DNAs will get regenerated. Increase this number when making gene database changed that would break old portraits. GRACEFUL_AGING_START = 25 # After this age, added life expectancy will make a character look younger than they are; the effect grows the further past this point one goes GRACEFUL_AGING_END = 70 # This is the apparent age at which life expectancy stops slowing down visual aging (each year onwards ages you visually 1 year) MAX_AGE = 100.0 # At this age portraits will use the special age gene at full strength @@ -1238,6 +1295,7 @@ NRaid = { DAYS_OF_IMMUNITY = 1825 # How long does raid immunity after defeating a raid army last? RAID_REALM_AI_COOLDOWN = 1 # How many years the AI should wait before considering raiding again, after any AI raiders have been defeated previously RAID_MINIMUM_ATTRITON = 0 # How low can the attrition go for raiders in particular? + RAID_NOMAD_FACTOR = 100 # How much to divide nomad raid loot value with ((herd/countycapitals)/RAID_NOMAD_FACTOR) } NCharacterGlow = { @@ -1346,8 +1404,21 @@ NInspiration = { } NCourtPositions = { + COURT_POSITION_ANIMATION_FREEZE = yes # If court position characters should animate in the UI or not + COURT_POSITION_DEFAULT_ANIMATION = "idle" # Default court portrait animation, used as a fallback if missing court_position_asset animation in Court Position or Court Task + COURT_POSITION_DEFAULT_BACKGROUND = "gfx/interface/illustrations/event_scenes/corridor.dds" # Default court background, used as a fallback if missing court_position_asset background in Court Position or Court Task + COURT_POSITION_BACKGROUND_ALPHA = 0.1 # How much grayscale to use for the court position backgrounds. Value between 0 to 1 + MAX_NUMBER_IN_COURT_POSITION = 5 # Max number of positions that a court position can have. DEFAULT_APTITUDE_LEVEL_BREAKPOINTS = { 20 40 60 80 } # Breakpoints to increase aptitude by 1. + + # Stargazer + COURT_ASTRONOMER_SUCCESS_CHANCE = { 0.0 0.14 0.33 0.6 0.85 } # Percent chance correctly predicting next Situation Phase based on level of Aptitude + COURT_ASTRONOMER_MAX_CERTAINTY = { 0.9 0.7 0.65 0.7 0.9 } # Max certainty percent they are in their first pick being the correct one in their HOME region based on level of Aptitude + COURT_ASTRONOMER_MIN_CERTAINTY = { 0.6 0.5 0.55 0.6 0.7 } # Min certainty percent they are in their first pick being the correct one in their HOME region based on level of Aptitude + COURT_ASTRONOMER_SUCCESS_CHANCE_HOME = { 0.1 0.22 0.46 0.8 0.99 } # Percent chance correctly predicting next Situation Phase in their HOME region based on level of Aptitude + COURT_ASTRONOMER_MAX_CERTAINTY_HOME = { 0.9 0.7 0.81 0.9 1.0 } # Max certainty percent they are in their first pick being the correct one in their HOME region based on level of Aptitude + COURT_ASTRONOMER_MIN_CERTAINTY_HOME = { 0.6 0.45 0.55 0.8 0.9 } # Min certainty percent they are in their first pick being the correct one in their HOME region based on level of Aptitude } NStruggle = { @@ -1539,3 +1610,30 @@ NAdministrative = { BASE_REASSIGN_COST = 100 # Base value used in the scripted cost for reassigning title troops DISCOUNTED_THRESHOLD_FACTOR = 0.9 # If the final reassign cost <= BASE_REASSIGN_COST * DISCOUNTED_THRESHOLD_FACTOR, we consider the title "discounted" } + +NCouncilTasks = { + # Which files are used as the default/backup assets when creating council task icons in the GUI + COUNCIL_TASK_DEFAULT_ICON_ASSET = "gfx/interface/_invalid_icon_debug.dds" + COUNCIL_TASK_DEFAULT_BACKGROUND_ASSET = "gfx/interface/buttons/button_round_bg.dds" + COUNCIL_TASK_DEFAULT_FRAME_ASSET = "gfx/interface/buttons/button_round_frame.dds" + COUNCIL_TASK_DEFAULT_GLOW_ASSET = "gfx/particles/halo.dds" +} + +NKurultai = { + KURULTAI_SUCCESSION_CHILD_MINIMUM_AGE = 12 # Minimum age when a child gets to vote in the Kurultai Succession + KURULTAI_SUCCESSION_CHILD_ELECTORS_DOMINANCE_1 = 2 # 'has_realm_law = nomadic_authority_1' means total 4 Kurultai members + X children votes during succession + KURULTAI_SUCCESSION_CHILD_ELECTORS_DOMINANCE_2 = 2 # 'has_realm_law = nomadic_authority_2' means total 4 Kurultai members + X children votes during succession + KURULTAI_SUCCESSION_CHILD_ELECTORS_DOMINANCE_3 = 2 # 'has_realm_law = nomadic_authority_3' means total 4 Kurultai members + X children votes during succession + KURULTAI_SUCCESSION_CHILD_ELECTORS_DOMINANCE_4 = 4 # 'has_realm_law = nomadic_authority_4' means total 4 Kurultai members + X children votes during succession + KURULTAI_SUCCESSION_CHILD_ELECTORS_DOMINANCE_5 = 6 # 'has_realm_law = nomadic_authority_5' means total 4 Kurultai members + X children votes during succession +} + +NBloodBrother = { + PRESTIGE_GAIN_PER_TIER = { 0.0 0.5 1 1.5 2 2 } # Prestige gain per tier higher your blood brother is than you + PIETY_GAIN_PER_TIER = { 0.1 0.5 1 1.5 2 2.5 } # Piety gain per tier of blood brother title + RENOWN_GAIN_PER_TIER = { 0.0 0.25 0.5 0.75 1 1.25 } # Renown gain per tier of blood brother title +} + +NMigration = { + MAX_MIGRATION_SQUARED_DISTANCE = 300000 # base suqared migration range before modifiers +} diff --git a/common/domiciles/buildings/00_camp_buildings.txt b/common/domiciles/buildings/00_camp_buildings.txt index 66eefa41..96b8ba2a 100644 --- a/common/domiciles/buildings/00_camp_buildings.txt +++ b/common/domiciles/buildings/00_camp_buildings.txt @@ -2278,10 +2278,6 @@ baggage_train_pleasure_tents = { # Pleasure Tents monthly_intrigue_lifestyle_xp_gain_mult = 0.25 fertility = 0.2 } - - parameters = { - camp_pleasure_tent_recruitment_events = yes - } ai_value = { value = camp_building_ai_base_t1 @@ -3755,7 +3751,15 @@ proving_grounds_life_in_the_saddle = { # Life in the Saddle } can_construct = { - culture = { has_cultural_parameter = unlock_maa_horse_archers } + custom_tooltip = { + text = proving_grounds_life_in_the_saddle_horse_archers_tt + any_maa_regiment = { + OR = { + is_maa_type = horse_archers + is_maa_type = heavy_horse_archers + } + } + } } character_modifier = { diff --git a/common/domiciles/types/00_domicile_types.txt b/common/domiciles/types/00_domicile_types.txt index eb1b6f2d..5ab6721d 100644 --- a/common/domiciles/types/00_domicile_types.txt +++ b/common/domiciles/types/00_domicile_types.txt @@ -7,6 +7,9 @@ map_pin_anchor = up provisions = yes + travel = yes + + can_move_manually = yes domicile_temperament_low_modifier = { name = domicile_temperament_low @@ -905,6 +908,7 @@ estate = { map_pin_anchor = left map_pin_lobby = yes + can_move_manually = yes move_cooldown = { days = estate_move_cooldown_value } move_cost = { gold = { @@ -1603,3 +1607,149 @@ estate = { ambience = "event:/DLC/EP3/SFX/Ambience/2D/Domicile/ep3_amb_2d_domicile_green_lands" } } + +yurt = { + rename_window = primary_title + + illustration = "gfx/interface/illustrations/event_scenes/mpo_camp_steppe.dds" + icon = "gfx/interface/icons/flat_icons/yurt.dds" + map_pin_texture = "gfx/interface/icons/map_icons/map_icon_yurt.dds" + map_pin_anchor = up + + herd = yes + travel = yes + culture_and_faith = yes + + move_with_realm_capital = yes + can_move_manually = no + + base_external_slots = 2 + + domicile_building_slots = { + main_slot = { + slot_type = main + position = { 28.2% 13.2% } + size = { 28.6% 37% } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_01.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_01_mask.png" + } + + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/under_construction_main_yurt.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/under_construction_main_yurt_mask.png" + } + } + + external_slot_1 = { + position = { 18% 4% } + size = { 15% 30% } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_01.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_01_mask.png" + } + + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/under_construction_yurt.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/under_construction_yurt_mask.png" + } + } + + external_slot_2 = { + position = { 4% 19% } + size = { 15% 30% } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_02.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_02_mask.png" + } + + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/under_construction_yurt.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/under_construction_yurt_mask.png" + } + } + + external_slot_3 = { + position = { 14% 46% } + size = { 15% 30% } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_03.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_03_mask.png" + } + + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/under_construction_yurt.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/under_construction_yurt_mask.png" + } + } + + external_slot_4 = { + position = { 53% 3% } + size = { 15% 30% } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_04.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_04_mask.png" + } + + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/under_construction_yurt.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/under_construction_yurt_mask.png" + } + } + + external_slot_5 = { + position = { 61% 31% } + size = { 15% 30% } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_05.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_05_mask.png" + } + + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/under_construction_yurt.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/under_construction_yurt_mask.png" + } + } + + external_slot_6 = { + position = { 41% 49% } + size = { 15% 30% } + + empty_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/yurt_empty_slot_06.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/yurt_empty_slot_06_mask.png" + } + + construction_slot_asset = { + icon = "gfx/interface/icons/flat_icons/plus.dds" + texture = "gfx/interface/window_domiciles/under_construction_yurt.dds" + intersectionmask_texture = "gfx/interface/window_domiciles/under_construction_yurt_mask.png" + } + } + } + + domicile_asset = { + background = "gfx/interface/window_domiciles/nomadic_domicile_background_steppe_terrain.dds" + foreground = "gfx/interface/window_domiciles/nomadic_domicile_background_steppe_terrain_foreground.dds" + ambience = "event:/DLC/CE2/Ambience/2D/Domicile/ce2_amb_2d_domicile_yurt" + } +} diff --git a/common/governments/00_government_types.txt b/common/governments/00_government_types.txt index 8857b340..14b553c6 100644 --- a/common/governments/00_government_types.txt +++ b/common/governments/00_government_types.txt @@ -16,19 +16,7 @@ feudal_government = { primary_holding = castle_holding required_county_holdings = { castle_holding city_holding church_holding } - vassal_contract = { - feudal_government_taxes - feudal_government_levies - special_contract - religious_rights - fortification_rights - coinage_rights - succession_rights - war_declaration_rights - council_rights - title_revocation_rights - jizya_special_rights - } + vassal_contract_group = feudal_vassal ai = { use_legends = yes @@ -37,6 +25,7 @@ feudal_government = { flag = may_elevate_co_monarch # Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player). flag = government_is_feudal + flag = government_is_settled color = hsv{ 0.67 1.00 0.78 } } @@ -46,21 +35,27 @@ republic_government = { required_county_holdings = { city_holding castle_holding church_holding } government_rules = { + inherit_from_dynastic_government = no create_cadet_branches = yes rulers_should_have_dynasty = yes legitimacy = yes - inherit_from_dynastic_government = no landless_playable = yes } domicile_type = estate + ai = { - use_legends = yes + arrange_marriage = no + use_goals = no + use_scripted_guis = no + perform_religious_reformation = no + use_legends = no } - - vassal_contract = { republic_government_obligations } + + vassal_contract_group = republic_vassal # Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player). flag = government_is_special_republic + flag = government_is_settled color = hsv{ 0.00 1.00 0.98 } } @@ -76,7 +71,7 @@ theocracy_government = { } primary_holding = church_holding - valid_holdings = { castle_holding } + valid_holdings = { castle_holding tribal_holding nomad_holding herder_holding } required_county_holdings = { church_holding castle_holding city_holding } ai = { @@ -91,16 +86,15 @@ theocracy_government = { } } - vassal_contract = { theocracy_government_obligations } + vassal_contract_group = theocracy_vassal # Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player). flag = government_is_theocracy + flag = government_is_settled color = hsv{ 0.00 0.00 0.78 } } ### Brief: clan_government -# This is referenced in code -# clan_government = { government_rules = { create_cadet_branches = yes @@ -124,15 +118,7 @@ clan_government = { house_unity = clan_house_unity tax_slot_type = clan_tax_slot - vassal_contract = { - clan_tax_collector_obligations - special_contract - religious_rights - war_declaration_rights - council_rights - title_revocation_rights - marriage_favor_rights - } + vassal_contract_group = clan_vassal ai = { use_legends = yes @@ -142,19 +128,12 @@ clan_government = { scope:vassal = { if = { limit = { + is_powerful_vassal = yes NOT = { is_allied_to = scope:liege } } - if = { - limit = { - is_powerful_vassal = yes - } - value = clan_powerful_vassal_no_alliance_opinion_penalty_value - } - else = { - value = clan_vassal_no_alliance_opinion_penalty_value - } + value = clan_powerful_vassal_no_alliance_opinion_penalty_value } } } @@ -171,23 +150,13 @@ clan_government = { } desc = "GOVERNMENT_CLAN_NOT_ALLIED_POWERFUL" } - triggered_desc = { - trigger = { - scope:vassal = { - NOT = { - is_allied_to = scope:liege - } - is_powerful_vassal = no - } - } - desc = "GOVERNMENT_CLAN_NOT_ALLIED" - } } } # Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player). flag = government_is_clan flag = may_appoint_viziers + flag = government_is_settled color = hsv{ 0.39 0.93 0.54 } } @@ -209,7 +178,7 @@ tribal_government = { always_use_patronym = yes affected_by_development = no - vassal_contract = { tribal_government_obligations } + vassal_contract_group = tribal_vassal ai = { use_legends = yes @@ -233,6 +202,7 @@ tribal_government = { flag = may_elevate_co_monarch # Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player). flag = government_is_tribal + flag = government_is_settled color = hsv{ 0.02 0.75 0.36 } } @@ -294,6 +264,11 @@ holy_order_government = { color = hsv{ 0.00 0.00 0.66 } } +### Brief: administrative_government +# Default administrative government, used for Byzantium +# +# This is referenced in code +# administrative_government = { government_rules = { create_cadet_branches = yes @@ -306,7 +281,8 @@ administrative_government = { #state_faith = yes use_as_base_on_landed = yes use_as_base_on_rank_up = yes - #inherit_from_dynastic_government = no + inherit_from_dynastic_government = no + sticky_government = yes } domicile_type = estate @@ -317,35 +293,30 @@ administrative_government = { valid_holdings = { city_holding } required_county_holdings = { castle_holding city_holding church_holding } - vassal_contract = { - administrative_obligations - administrative_themes - } + vassal_contract_group = admin_vassal character_modifier = { - #levy_size = -0.2 - #feudal_government_tax_contribution_mult = -0.2 - #feudal_government_levy_contribution_mult = -0.2 - #clan_government_tax_contribution_mult = -0.2 - #clan_government_levy_contribution_mult = -0.2 - #men_at_arms_cap = -1 - #men_at_arms_limit = -1 - #knight_limit = -3 - #vassal_limit = 100 - #active_accolades = -1 - #title_creation_cost_mult = -0.5 + vassal_limit = 100 + active_accolades = -1 + title_creation_cost_mult = -0.5 } - # Use flags instead of has_government = administrative_government for moddability if possible (i.e., wherever not visible to the player). + # Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player). flag = government_is_administrative # These flags only exist for loc and in-game descriptions flag = government_has_influence flag = government_has_title_men_at_arms flag = government_has_powerful_families + flag = government_is_settled color = { 72 6 92 } } +### Brief: landless_adventurer_government +# Default landless adventurer government +# +# This is referenced in code +# landless_adventurer_government = { government_rules = { court_generate_spouses = no @@ -358,6 +329,7 @@ landless_adventurer_government = { mercenary = yes allow_out_of_realm_inheritance = yes use_as_base_on_landed = yes + use_maa_maintenance = no } domicile_type = camp @@ -395,7 +367,131 @@ landless_adventurer_government = { # Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player). flag = cannot_be_vassal_or_liege - flag = adult_rulers_only flag = government_is_landless_adventurer color = hsv{ 0.00 0.00 0.66 } } + +### Brief: nomad_government +# Default nomad government, used for the Steppe Region +# +# This is referenced in code +# +nomad_government = { + government_rules = { + create_cadet_branches = yes + rulers_should_have_dynasty = yes + dynasty_named_realms = no + royal_court = yes + landless_playable = yes + legitimacy = yes + use_as_base_on_rank_up = yes + use_as_base_on_landed = yes + conditional_maa_refill = yes + uses_county_fertility = yes + uses_culture_and_house_head_named_realms = yes + sticky_government = yes + obedience = yes + subject_men_at_arms = yes + no_capital_movement_cooldown = yes + } + + domicile_type = yurt + + primary_holding = nomad_holding + valid_holdings = { nomad_holding castle_holding tribal_holding } + required_county_holdings = { nomad_holding } + + generated_character_template = nomadic_chieftain_character + + affected_by_development = no + max_dread = 150 + + vassal_contract_group = nomad_vassal + + character_modifier = { + steppe_travel_danger = steppe_high_danger_reduction + plains_travel_danger = steppe_high_danger_reduction + drylands_travel_danger = drylands_medium_danger_reduction + mountains_travel_danger = mountains_medium_danger_reduction + steppe_cancel_negative_supply = yes + ignore_negative_opinion_of_culture = yes + county_fertility_decline_add = -15 + movement_speed = 0.1 + movement_speed_land_raiding = 0.1 + the_great_steppe_supply_limit_add = 10000 + game_rule_extra_nomads_arabs_supply_limit_add = 10000 + game_rule_extra_nomads_horn_supply_limit_add = 10000 + game_rule_extra_nomads_sahel_supply_limit_add = 10000 + game_rule_extra_nomads_sami_supply_limit_add = 10000 + game_rule_extra_nomads_tibet_supply_limit_add = 10000 + domain_limit = -1 + ai_war_cooldown = -0.5 + ai_war_chance = 2 + men_at_arms_maintenance = -0.5 + supply_duration = 1 + county_opinion_add = 25 + title_creation_cost_mult = -0.5 + } + + # Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player). + flag = government_is_nomadic + flag = government_can_raid_rule + flag = government_can_use_tributary_men_at_arms + flag = can_start_war_with_raised_troops + flag = ignores_faith_marriage_penalties + flag = no_hostile_attrition_in_steppe # Done in code, here for loc + flag = movement_speed_from_government + flag = land_raiding_movement_speed_from_government + flag = can_raze_holdings + + # These flags only exist for loc and in-game descriptions + color = { 255 127 80 } +} + +### Brief: herder_government +# Default herder government, used for the Steppe Region +# +# This is referenced in code +# +herder_government = { + primary_holding = herder_holding + valid_holdings = { herder_holding castle_holding tribal_holding } + required_county_holdings = { herder_holding } + + generated_character_template = herder_character + + government_rules = { + court_generate_spouses = no + council = no + create_cadet_branches = no + rulers_should_have_dynasty = no + uses_county_fertility = yes + replenishes_county_fertility = yes + deny_powerful_vassal = yes + redirects_wars_to_overlord = yes + } + + character_modifier = { + knight_limit = -100 + active_accolades = -100 + county_opinion_add = 100 + monthly_income_mult = -10 + } + + ai = { + use_lifestyle = no + arrange_marriage = no + use_goals = no + use_decisions = no + use_scripted_guis = no + use_legends = no + perform_religious_reformation = no + } + + vassal_contract_group = herder_vassal + + # Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player). + flag = government_is_herder + flag = ignores_faith_marriage_penalties + color = { 235 213 52 } +} diff --git a/common/governments/_governments.info b/common/governments/_governments.info index 01aeff9d..6f0942ea 100644 --- a/common/governments/_governments.info +++ b/common/governments/_governments.info @@ -113,6 +113,7 @@ ### brief: use_title_tier_modifiers ( bool ) # Enable passive prestige gain from held titles and title tier modifiers # Default is yes. + # use_title_tier_modifiers = yes ### brief: inherit_from_dynastic_government ( bool ) @@ -123,7 +124,31 @@ # Other non-dynastic governments are considered more advanced, and this prevents inferior # dynastic governments from stealing land and non-dynastic vassals via inheritance # Default is yes. + # inherit_from_dynastic_government = yes + + ### brief: dynasty_named_realms ( bool ) + # The realm of the government using this will have it's map name instead be based on their + # dynasty and culture - the following rules apply + # (In this example we use the mongols of the dynasty Borjigin) + # If you are the culture head - you would be The Mongols + # If you're not the culture head - but you're the head of your dynasty - you would be The Borjigin Mongols + # If you're neither - you would have your normal map name + # Default is no. + # + dynasty_named_realms = no + + ### brief: deny_powerful_vassal ( bool ) + # Characters with this government rule will never become powerful vassals + # Default is no. + # + deny_powerful_vassal = no + + ### brief: use_maa_maintenance ( bool ) + # Characters with this government rule will always pay maintenance on MaA + # Default is yes. + # + use_maa_maintenance = yes } ### brief: always_use_patronym ( bool ) @@ -180,6 +205,16 @@ # required_county_holdings = { castle_holding city_holding } + ### brief: generated_character_template ( database key, optional ) + # Which scripted character template should be the default used to + # generate characters for this government type? If none is defined, + # a generic random character will be created. Keys are mapped to + # the scripted character template database: + # common/scripted_character_templates + # Default: none + # + generated_character_template = herder_character + ### brief: primary_heritages ( array of database keys ) # A list of heritages for which this government type is valid and # preferred. If both primary_cultures and primary_heritages are diff --git a/common/laws/00_realm_laws.txt b/common/laws/00_realm_laws.txt index 4e35528c..f1b83882 100644 --- a/common/laws/00_realm_laws.txt +++ b/common/laws/00_realm_laws.txt @@ -1,5 +1,6 @@ @crown_authority_cooldown_years = 20 @tribal_authority_cooldown_years = 10 +@nomadic_authority_cooldown_years = 5 @imperial_bureaucracy_cooldown_years_1 = 10 @imperial_bureaucracy_cooldown_years_2 = 20 @imperial_bureaucracy_cooldown_years_3 = 30 @@ -19,6 +20,7 @@ crown_authority = { crown_authority_0 = { modifier = { + belligerent_opinion = -10 barons_and_minor_landholders_opinion = 20 glory_hound_opinion = 10 parochial_opinion = 10 @@ -30,7 +32,7 @@ crown_authority = { realm_law_use_crown_authority = yes trigger_if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = no } liege = { has_realm_law = crown_authority_0 } @@ -45,15 +47,16 @@ crown_authority = { crown_authority_1 = { modifier = { + belligerent_opinion = 5 barons_and_minor_landholders_opinion = -30 glory_hound_opinion = -15 parochial_opinion = -15 courtly_opinion = -5 minority_opinion = -10 } - flag = uses_crown_authority flag = title_revocation_allowed flag = vassal_retraction_allowed + flag = can_have_tributaries flag = can_change_partition_succession_laws flag = diarchs_want_to_subsidise_without_this_flag @@ -61,7 +64,7 @@ crown_authority = { realm_law_use_crown_authority = yes trigger_if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = no } liege = { has_realm_law = crown_authority_1 } @@ -121,6 +124,7 @@ crown_authority = { crown_authority_2 = { modifier = { + belligerent_opinion = 10 barons_and_minor_landholders_opinion = -10 glory_hound_opinion = -10 parochial_opinion = -10 @@ -130,7 +134,6 @@ crown_authority = { vassal_tax_contribution_mult = 0.1 vassal_levy_contribution_mult = 0.1 } - flag = uses_crown_authority flag = vassal_internal_wars_banned flag = vassal_refusal_is_treason flag = can_change_succession_laws @@ -140,7 +143,7 @@ crown_authority = { realm_law_use_crown_authority = yes trigger_if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = no } liege = { has_realm_law = crown_authority_2 } @@ -152,7 +155,7 @@ crown_authority = { limit = { NOT = { has_realm_law = crown_authority_3 } NAND = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = no } } @@ -204,6 +207,7 @@ crown_authority = { crown_authority_3 = { modifier = { + belligerent_opinion = 15 barons_and_minor_landholders_opinion = -20 glory_hound_opinion = -25 parochial_opinion = -25 @@ -213,7 +217,6 @@ crown_authority = { vassal_tax_contribution_mult = 0.25 vassal_levy_contribution_mult = 0.25 } - flag = uses_crown_authority flag = vassal_all_wars_banned flag = can_designate_heirs flag = max_authority_level @@ -222,7 +225,7 @@ crown_authority = { realm_law_use_crown_authority = yes trigger_if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = no } liege = { has_realm_law = crown_authority_3 } @@ -233,7 +236,7 @@ crown_authority = { trigger_if = { limit = { NAND = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = no } } @@ -287,6 +290,7 @@ tribal_authority = { glory_hound_opinion = 10 parochial_opinion = 10 courtly_opinion = 5 + belligerent_opinion = -15 } flag = uses_tribal_authority flag = imprisonment_toggle_enable @@ -306,12 +310,15 @@ tribal_authority = { parochial_opinion = -15 courtly_opinion = -5 minority_opinion = -10 + belligerent_opinion = 5 } - flag = uses_tribal_authority + flag = can_have_tributaries flag = can_change_succession_laws flag = imprisonment_toggle_on - can_keep = { realm_law_use_tribal_authority = yes } + can_keep = { + realm_law_use_tribal_authority = yes + } can_pass = { trigger_if = { @@ -370,13 +377,18 @@ tribal_authority = { courtly_opinion = -5 zealot_opinion = -10 minority_opinion = -10 + belligerent_opinion = 15 } - flag = uses_tribal_authority flag = title_revocation_allowed flag = vassal_retraction_allowed flag = diarchs_want_to_subsidise_without_this_flag - can_keep = { realm_law_use_tribal_authority = yes } + can_keep = { + realm_law_use_tribal_authority = yes + NOT = { + is_confederation_member = yes + } + } can_pass = { trigger_if = { @@ -435,13 +447,18 @@ tribal_authority = { courtly_opinion = -10 zealot_opinion = -20 minority_opinion = -30 + belligerent_opinion = 20 } - flag = uses_tribal_authority flag = max_authority_level #Settling is disabled unless you have this law. Script is in the decisions, currently in 80_major_decisions. #Reforming pagan religions (but not creating other faiths) is disabled unless you have this law. Script is in the reformation prereqs, currently in 00_rules. - can_keep = { realm_law_use_tribal_authority = yes } + can_keep = { + realm_law_use_tribal_authority = yes + NOT = { + is_confederation_member = yes + } + } can_pass = { has_realm_law = tribal_authority_2 @@ -489,6 +506,10 @@ camp_purpose = { flag = realm_law camp_purpose_wanderers = { + pass_phrase = camp_purpose_pass_phrase + confirmation_title = camp_purpose_pass_phrase + confirmation_button_text = camp_purpose_confirmation_button_text + flag = uses_camp_purpose flag = can_change_succession_laws flag = can_change_purpose_for_free @@ -517,6 +538,10 @@ camp_purpose = { } camp_purpose_mercenaries = { + pass_phrase = camp_purpose_pass_phrase + confirmation_title = camp_purpose_pass_phrase + confirmation_button_text = camp_purpose_confirmation_button_text + flag = uses_camp_purpose flag = can_change_succession_laws flag = laamp_contracts_weight_up_mercenary @@ -628,6 +653,10 @@ camp_purpose = { } camp_purpose_scholars = { + pass_phrase = camp_purpose_pass_phrase + confirmation_title = camp_purpose_pass_phrase + confirmation_button_text = camp_purpose_confirmation_button_text + modifier = { monthly_lifestyle_xp_gain_mult = 0.2 } @@ -741,6 +770,10 @@ camp_purpose = { } camp_purpose_explorers = { + pass_phrase = camp_purpose_pass_phrase + confirmation_title = camp_purpose_pass_phrase + confirmation_button_text = camp_purpose_confirmation_button_text + modifier = { character_travel_speed_mult = 0.25 coastal_sea_travel_danger = medium_sea_danger_reduction @@ -859,6 +892,10 @@ camp_purpose = { } camp_purpose_brigands = { + pass_phrase = camp_purpose_pass_phrase + confirmation_title = camp_purpose_pass_phrase + confirmation_button_text = camp_purpose_confirmation_button_text + flag = uses_camp_purpose flag = can_change_succession_laws flag = laamp_contracts_weight_up_criminal @@ -1008,6 +1045,10 @@ camp_purpose = { } camp_purpose_legitimists = { + pass_phrase = camp_purpose_pass_phrase + confirmation_title = camp_purpose_pass_phrase + confirmation_button_text = camp_purpose_confirmation_button_text + flag = uses_camp_purpose flag = can_change_succession_laws flag = martial_camp_purpose @@ -1019,6 +1060,7 @@ camp_purpose = { flag = unlocks_baggage_train_ransom_cages flag = unlocks_camp_fire_future_dreams flag = unlocks_proving_grounds_bodyguard_drills + flag = unlocks_proving_grounds_lockwagon can_keep = { realm_law_use_camp_purpose = yes @@ -1117,6 +1159,7 @@ imperial_bureaucracy = { imperial_bureaucracy_0 = { modifier = { + belligerent_opinion = -10 barons_and_minor_landholders_opinion = 20 glory_hound_opinion = 10 parochial_opinion = 10 @@ -1156,6 +1199,7 @@ imperial_bureaucracy = { imperial_bureaucracy_1 = { modifier = { + belligerent_opinion = 5 barons_and_minor_landholders_opinion = -30 glory_hound_opinion = -15 parochial_opinion = -15 @@ -1164,7 +1208,7 @@ imperial_bureaucracy = { administrative_government_tax_contribution_add = 0.05 vassal_limit = 100 } - flag = uses_imperial_bureaucracy + flag = can_have_tributaries flag = title_revocation_allowed flag = vassal_retraction_allowed flag = can_change_partition_succession_laws @@ -1247,6 +1291,7 @@ imperial_bureaucracy = { imperial_bureaucracy_2 = { modifier = { + belligerent_opinion = 10 barons_and_minor_landholders_opinion = -10 glory_hound_opinion = -10 parochial_opinion = -10 @@ -1257,7 +1302,6 @@ imperial_bureaucracy = { republic_government_tax_contribution_add = 0.05 vassal_limit = 100 } - flag = uses_imperial_bureaucracy flag = vassal_refusal_is_treason flag = can_change_succession_laws flag = vassal_all_wars_banned @@ -1338,6 +1382,7 @@ imperial_bureaucracy = { imperial_bureaucracy_3 = { modifier = { + belligerent_opinion = 15 barons_and_minor_landholders_opinion = -20 glory_hound_opinion = -25 parochial_opinion = -25 @@ -1348,7 +1393,6 @@ imperial_bureaucracy = { republic_government_tax_contribution_add = 0.05 vassal_limit = 200 } - flag = uses_imperial_bureaucracy flag = vassal_all_wars_banned_permanent flag = max_authority_level flag = admin_title_troop_cost_reduction_high @@ -1417,3 +1461,376 @@ imperial_bureaucracy = { } } } + +nomadic_authority = { + default = nomadic_authority_1 + cumulative = yes + flag = realm_law + + nomadic_authority_1 = { + pass_phrase = nomadic_authority_1_pass_phrase + confirmation_title = nomadic_authority_1_pass_phrase + confirmation_button_text = nomadic_authority_confirmation_button_text + + modifier = { + belligerent_opinion = -25 + glory_hound_opinion = -20 + domain_limit_min = 1 + domain_limit_max = 2 + vassal_limit_min = 1 + vassal_limit_max = 1 + } + flag = can_have_tributaries + flag = title_revocation_allowed + flag = uses_nomadic_authority + flag = imprisonment_toggle_enable + flag = access_to_nomadic_county_conquest + + can_pass = { + has_realm_law = nomadic_authority_2 + } + + can_keep = { realm_law_use_nomadic_authority = yes } + #Imprisonment is disabled if you have this law. Script is in the interaction, currently in 00_prison_interactions. + + on_pass = { + # Remove modifiers. + remove_law_related_modifiers_effect = yes + } + } + + nomadic_authority_2 = { + pass_phrase = nomadic_authority_2_pass_phrase + confirmation_title = nomadic_authority_2_pass_phrase + confirmation_button_text = nomadic_authority_confirmation_button_text + + modifier = { + belligerent_opinion = 10 + glory_hound_opinion = 10 + max_migration_distance_mult = 0.25 + domain_limit_min = 1 + domain_limit_max = 1 + vassal_limit_min = 1 + vassal_limit_max = 2 # 3 + } + flag = can_change_succession_laws + flag = imprisonment_toggle_on + flag = title_revocation_allowed + flag = migration_to_duchies + flag = access_to_nomadic_county_conquest + flag = unlock_maa_nomad_lancers + + can_keep = { + realm_law_use_nomadic_authority = yes + } + + can_pass = { + custom_tooltip = { + text = "nomadic_authority_2_level_requirement" + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_3 + } + } + custom_description = { + subject = root + text = "has_nomadic_authority_cooldown" + NAND = { + has_variable = nomadic_authority_cooldown + NOT = { + culture = { has_innovation = innovation_all_things } + } + } + } + domicile.herd >= nomadic_authority_level_2_requirement + } + + pass_cost = { + prestige = { + if = { + limit = { + NOR = { + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_3 + } + } + add = increase_nomadic_authority_prestige_cost + } + } + } + + on_pass = { + # Increment cooldown breaker tally, if appropriate. + calculate_authority_cooldown_break_effect = yes + # Set regular cooldown. + set_variable = { + name = nomadic_authority_cooldown + years = @nomadic_authority_cooldown_years + } + # Remove modifiers. + remove_law_related_modifiers_effect = yes + } + + ai_will_do = { + if = { + limit = { has_realm_law = nomadic_authority_1 } + value = 1 + } + } + } + + nomadic_authority_3 = { + pass_phrase = nomadic_authority_3_pass_phrase + confirmation_title = nomadic_authority_3_pass_phrase + confirmation_button_text = nomadic_authority_confirmation_button_text + + modifier = { + belligerent_opinion = 10 + glory_hound_opinion = 10 + max_migration_distance_mult = 0.5 + domain_limit_min = 2 + domain_limit_max = 3 + vassal_limit_min = 8 + vassal_limit_max = 12 # 15 + } + flag = vassal_retraction_allowed + flag = diarchs_want_to_subsidise_without_this_flag + flag = migration_to_kingdoms + flag = access_to_nomadic_duchy_conquest + + can_keep = { + realm_law_use_nomadic_authority = yes + NOT = { + is_confederation_member = yes + } + } + + can_pass = { + custom_tooltip = { + text = "nomadic_authority_3_level_requirement" + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_4 + } + } + custom_description = { + subject = root + text = "has_nomadic_authority_cooldown" + NAND = { + has_variable = nomadic_authority_cooldown + NOT = { + culture = { has_innovation = innovation_all_things } + } + } + } + domicile.herd >= nomadic_authority_level_3_requirement + } + + pass_cost = { + prestige = { + if = { + limit = { + NOR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + } + } + add = increase_nomadic_authority_prestige_cost + } + } + } + + on_pass = { + # Increment cooldown breaker tally, if appropriate. + calculate_authority_cooldown_break_effect = yes + # Set regular cooldown. + set_variable = { + name = nomadic_authority_cooldown + years = @nomadic_authority_cooldown_years + } + # Remove modifiers. + remove_law_related_modifiers_effect = yes + } + + ai_will_do = { + if = { + limit = { has_realm_law = nomadic_authority_2 } + value = 1 + } + } + } + + nomadic_authority_4 = { + pass_phrase = nomadic_authority_4_pass_phrase + confirmation_title = nomadic_authority_4_pass_phrase + confirmation_button_text = nomadic_authority_confirmation_button_text + + modifier = { + belligerent_opinion = 20 + glory_hound_opinion = 10 + max_migration_distance_mult = 1 + domain_limit_min = 2 + vassal_limit_min = 5 + vassal_limit_max = 15 + } + flag = migration_to_empires + #Settling is disabled unless you have this law. Script is in the decisions, currently in 80_major_decisions. + #Reforming pagan religions (but not creating other faiths) is disabled unless you have this law. Script is in the reformation prereqs, currently in 00_rules. + + can_keep = { + realm_law_use_nomadic_authority = yes + NOT = { + is_confederation_member = yes + } + } + + can_pass = { + custom_tooltip = { + text = "nomadic_authority_4_level_requirement" + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_5 + } + } + custom_description = { + subject = root + text = "has_nomadic_authority_cooldown" + NAND = { + has_variable = nomadic_authority_cooldown + NOT = { + culture = { has_innovation = innovation_all_things } + } + } + } + domicile.herd >= nomadic_authority_level_4_requirement + } + + pass_cost = { + prestige = { + if = { + limit = { + NOR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + add = increase_nomadic_authority_prestige_cost + } + } + } + + on_pass = { + # Increment cooldown breaker tally, if appropriate. + calculate_authority_cooldown_break_effect = yes + # Set regular cooldown. + set_variable = { + name = nomadic_authority_cooldown + years = @nomadic_authority_cooldown_years + } + # Remove modifiers. + remove_law_related_modifiers_effect = yes + } + + ai_will_do = { + if = { + limit = { has_realm_law = nomadic_authority_3 } + value = 1 + } + } + + } + + nomadic_authority_5 = { + pass_phrase = nomadic_authority_5_pass_phrase + confirmation_title = nomadic_authority_5_pass_phrase + confirmation_button_text = nomadic_authority_confirmation_button_text + + modifier = { + belligerent_opinion = 25 + glory_hound_opinion = 15 + max_migration_distance_mult = 10 + max_migration_distance_mult = 2 + vassal_limit_min = 985 + vassal_limit_max = 970 + } + flag = max_authority_level + #Settling is disabled unless you have this law. Script is in the decisions, currently in 80_major_decisions. + #Reforming pagan religions (but not creating other faiths) is disabled unless you have this law. Script is in the reformation prereqs, currently in 00_rules. + + can_keep = { + realm_law_use_nomadic_authority = yes + NOT = { + is_confederation_member = yes + } + } + + can_pass = { + has_realm_law = nomadic_authority_4 + trigger_if = { + limit = { + any_character_situation = { + any_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = root + } + } + } + custom_description = { + text = nomadic_authority_5_gurkhan + any_character_situation = { + any_participant_group = { + participant_group_type = nomad_rulers_capital + participant_group_has_character = root + } + situation_top_herd ?= root + } + } + } + custom_description = { + subject = root + text = "has_nomadic_authority_cooldown" + NAND = { + has_variable = nomadic_authority_cooldown + NOT = { + culture = { has_innovation = innovation_all_things } + } + } + } + domicile.herd >= nomadic_authority_level_5_requirement + } + + pass_cost = { + prestige = { + if = { + limit = { + NOT = { + has_realm_law = nomadic_authority_5 + } + } + add = increase_nomadic_authority_prestige_cost + multiply = 2 + } + } + } + + on_pass = { + # Increment cooldown breaker tally, if appropriate. + calculate_authority_cooldown_break_effect = yes + # Set regular cooldown. + set_variable = { + name = nomadic_authority_cooldown + years = @nomadic_authority_cooldown_years + } + # Remove modifiers. + remove_law_related_modifiers_effect = yes + play_sound_effect = "event:/DLC/CE2/UI/Notifications/ce2_ui_notifications_nomadicAuthority_wolf" + } + + ai_will_do = { + if = { + limit = { has_realm_law = nomadic_authority_4 } + value = 1 + } + } + } +} diff --git a/common/laws/00_succession_laws.txt b/common/laws/00_succession_laws.txt index fed01126..22059969 100644 --- a/common/laws/00_succession_laws.txt +++ b/common/laws/00_succession_laws.txt @@ -7,9 +7,21 @@ } can_pass = { can_change_partition_succession_law_trigger = yes + trigger_if = { + limit = { + exists = primary_title + } + is_confederation_member = no + } } can_have = { can_have_confederate_partition_succession_law_trigger = yes + trigger_if = { + limit = { + exists = primary_title + } + is_confederation_member = no + } } should_start_with = { NOR = { @@ -41,6 +53,7 @@ modifier = { glory_hound_opinion = 10 parochial_opinion = 5 + belligerent_opinion = -10 dynasty_house_opinion = 5 eligible_child_opinion = 10 } @@ -49,20 +62,47 @@ } potential = { - NOT = { government_has_flag = government_is_clan } - NOT = { government_has_flag = government_is_administrative } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_clan + government_has_flag = government_is_administrative + } } } partition_succession_law = { can_keep = { - can_keep_partition_succession_law_trigger = yes + OR = { + can_keep_partition_succession_law_trigger = yes + trigger_if = { + limit = { + exists = primary_title + } + is_confederation_member = yes + } + } } can_pass = { - can_change_partition_succession_law_trigger = yes + OR = { + can_change_partition_succession_law_trigger = yes + trigger_if = { + limit = { + exists = primary_title + } + is_confederation_member = yes + } + } } can_have = { - can_have_partition_succession_law_trigger = yes + OR = { + can_have_partition_succession_law_trigger = yes + trigger_if = { + limit = { + exists = primary_title + } + is_confederation_member = yes + } + } } should_start_with = { NOR = { @@ -77,7 +117,7 @@ has_innovation = innovation_heraldry } } - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } } succession = { order_of_succession = inheritance @@ -89,6 +129,7 @@ modifier = { glory_hound_opinion = 10 parochial_opinion = 5 + belligerent_opinion = -10 player_heir_opinion = 10 eligible_child_except_player_heir_opinion = 5 } @@ -104,8 +145,11 @@ } potential = { - NOT = { government_has_flag = government_is_clan } - NOT = { government_has_flag = government_is_administrative } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_clan + government_has_flag = government_is_administrative + } } } @@ -117,6 +161,7 @@ can_change_partition_succession_law_trigger = yes } can_have = { + NOT = { government_has_flag = government_is_nomadic } can_have_high_partition_succession_law_trigger = yes } should_start_with = { @@ -132,7 +177,7 @@ has_innovation = innovation_hereditary_rule } } - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } } succession = { order_of_succession = inheritance @@ -144,6 +189,7 @@ flag = partition_succession_law modifier = { glory_hound_opinion = 5 + belligerent_opinion = -10 player_heir_opinion = 15 } pass_cost = { @@ -163,8 +209,11 @@ } potential = { - NOT = { government_has_flag = government_is_clan } - NOT = { government_has_flag = government_is_administrative } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_clan + government_has_flag = government_is_administrative + } } } @@ -181,6 +230,7 @@ } } can_have = { + NOT = { government_has_flag = government_is_nomadic } can_have_single_heir_succession_law_trigger = yes } can_pass = { @@ -191,10 +241,18 @@ } piety_level >= 3 } + trigger_if = { + limit = { + government_has_flag = government_is_administrative + } + influence_level >= 4 + has_active_diarchy = no + primary_title = { title_held_years >= 10 } + } } should_start_with = { historical_succession_access_single_heir_succession_law_trigger = yes - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } } succession = { order_of_succession = inheritance @@ -233,7 +291,55 @@ } potential = { - NOT = { government_has_flag = government_is_administrative } + NOT = { government_has_flag = government_is_nomadic } + trigger_if = { + limit = { + government_has_flag = government_is_administrative + } + is_independent_ruler = yes + } + } + } + + single_heir_succession_kurultai_law = { + can_keep = { + government_has_flag = government_is_nomadic + } + can_have = { + government_has_flag = government_is_nomadic + } + can_pass = { + government_has_flag = government_is_nomadic + } + should_start_with = { + government_has_flag = government_is_nomadic + } + succession = { + order_of_succession = inheritance + traversal_order = children + rank = oldest + title_division = single_heir + } + flag = advanced_succession_law + flag = can_designate_heirs + modifier = { + belligerent_opinion = 10 + glory_hound_opinion = 5 + player_heir_opinion = 20 + eligible_child_except_player_heir_opinion = -20 + } + pass_cost = { + } + revoke_cost = { + prestige = change_succession_law_prestige_cost + } + + ai_will_do = { + value = 3 + } + + potential = { + government_has_flag = government_is_nomadic } } @@ -250,6 +356,7 @@ } } can_have = { + NOT = { government_has_flag = government_is_nomadic } can_have_single_heir_youngest_succession_law_trigger = yes } can_pass = { @@ -260,6 +367,14 @@ } piety_level >= 3 } + trigger_if = { + limit = { + government_has_flag = government_is_administrative + } + influence_level >= 4 + has_active_diarchy = no + primary_title = { title_held_years >= 10 } + } } succession = { order_of_succession = inheritance @@ -295,7 +410,13 @@ } potential = { - NOT = { government_has_flag = government_is_administrative } + trigger_if = { + limit = { + government_has_flag = government_is_administrative + } + is_independent_ruler = yes + } + NOT = { government_has_flag = government_is_nomadic } } } @@ -312,6 +433,7 @@ } } can_have = { + NOT = { government_has_flag = government_is_nomadic } can_have_single_heir_dynasty_house_trigger = yes } can_pass = { @@ -325,7 +447,7 @@ } should_start_with = { historical_succession_access_single_heir_dynasty_house_trigger = yes - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } } succession = { order_of_succession = inheritance @@ -362,6 +484,7 @@ ai_will_do = { if = { limit = { + exists = primary_title primary_title.tier > tier_county OR = { #West Slavic @@ -373,7 +496,10 @@ } potential = { - NOT = { government_has_flag = government_is_administrative } + NOR = { + government_has_flag = government_is_administrative + government_has_flag = government_is_nomadic + } } } @@ -385,12 +511,13 @@ can_change_acclamation_succession_law_trigger = yes } can_have = { + NOT = { government_has_flag = government_is_nomadic } can_have_acclamation_succession_law_trigger = yes } should_start_with = { has_ep3_dlc_trigger = yes - has_title = title:e_britannia - has_government = administrative_government + has_title = title:e_byzantium + government_has_flag = government_is_administrative } succession = { order_of_succession = appointment @@ -398,8 +525,15 @@ } flag = advanced_succession_law flag = can_designate_heirs + flag = appointment_type_succession pass_cost = { - prestige = change_succession_law_prestige_cost + prestige = { + value = change_succession_law_prestige_cost + multiply = { + value = 0.5 # We reduce the cost to ensure that going back to acclamation is easy + desc = "[administrative_government|E]" + } + } } ai_will_do = { if = { @@ -408,14 +542,14 @@ } } potential = { - has_government = administrative_government + government_has_flag = government_is_administrative + is_independent_ruler = yes } } appointment_succession_law = { can_keep = { - has_government = administrative_government - is_independent_ruler = no + can_keep_appointment_succession_law_trigger = yes # Vassal Contract allows it custom_description = { @@ -427,17 +561,14 @@ } } can_have = { - #can_have_single_heir_succession_law_trigger = yes - has_government = administrative_government - is_independent_ruler = no + NOT = { government_has_flag = government_is_nomadic } + can_have_appointment_succession_law_trigger = yes } can_pass = { - can_change_succession_law_trigger = yes - has_government = administrative_government - is_independent_ruler = no + can_change_appointment_succession_law_trigger = yes } should_start_with = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = no } succession = { @@ -445,6 +576,7 @@ appointment_type = admin_governor } flag = advanced_succession_law + flag = appointment_type_succession modifier = { glory_hound_opinion = -10 parochial_opinion = -5 @@ -472,7 +604,8 @@ } potential = { - has_government = administrative_government + government_has_flag = government_is_administrative + is_independent_ruler = no } } @@ -641,6 +774,7 @@ dynasty_house_opinion = -10 glory_hound_opinion = 15 zealot_opinion = 10 + belligerent_opinion = -10 player_heir_opinion = 10 eligible_child_except_player_heir_opinion = 5 } @@ -695,6 +829,7 @@ modifier = { glory_hound_opinion = 10 zealot_opinion = 5 + belligerent_opinion = -5 player_heir_opinion = 10 eligible_child_except_player_heir_opinion = 5 } @@ -868,6 +1003,29 @@ widget_name = "widget_clan_law" } + + herder_succession_law = { + can_keep = { + can_have_herder_succession_law_trigger = yes + } + can_have = { + can_have_herder_succession_law_trigger = yes + } + should_start_with = { + government_has_flag = government_is_herder + } + can_remove_from_title = { + always = no + } + succession = { + order_of_succession = generate + pool_character_config = pool_herder_succession + } + + potential = { + can_have_herder_succession_law_trigger = yes + } + } } succession_gender_laws = { @@ -885,7 +1043,7 @@ succession_gender_laws = { trigger_if = { limit = { is_independent_ruler = no - has_government = administrative_government + government_has_flag = government_is_administrative } top_liege = { has_realm_law = male_only_law } } @@ -908,7 +1066,7 @@ succession_gender_laws = { trigger_if = { limit = { is_independent_ruler = no - has_government = administrative_government + government_has_flag = government_is_administrative } top_liege = { has_realm_law = male_only_law } } @@ -945,7 +1103,7 @@ succession_gender_laws = { trigger_if = { limit = { is_independent_ruler = no - has_government = administrative_government + government_has_flag = government_is_administrative } top_liege = { has_realm_law = male_preference_law } } @@ -974,7 +1132,7 @@ succession_gender_laws = { trigger_if = { limit = { is_independent_ruler = no - has_government = administrative_government + government_has_flag = government_is_administrative } top_liege = { has_realm_law = male_preference_law } } @@ -989,7 +1147,29 @@ succession_gender_laws = { } has_doctrine = doctrine_gender_male_dominated } - has_realm_law = male_only_law # For when male_only_law ceases to be a legal option + AND = { + has_realm_law = male_only_law # For when male_only_law ceases to be a legal option + trigger_if = { + limit = { + is_independent_ruler = no + government_has_flag = government_is_administrative + } + NOT = { + top_liege = { has_realm_law = male_only_law } + } + } + trigger_else = { + custom_tooltip = { + text = culture_not_female_only_tt + NOR = { + faith = { has_doctrine = doctrine_gender_male_dominated } + NOT = { + culture = { has_cultural_parameter = female_only_inheritance } + } + } + } + } + } } } } @@ -1019,7 +1199,7 @@ succession_gender_laws = { trigger_if = { limit = { is_independent_ruler = no - has_government = administrative_government + government_has_flag = government_is_administrative } top_liege = { has_realm_law = equal_law } } @@ -1051,7 +1231,7 @@ succession_gender_laws = { trigger_if = { limit = { is_independent_ruler = no - has_government = administrative_government + government_has_flag = government_is_administrative } top_liege = { has_realm_law = equal_law } } @@ -1084,6 +1264,7 @@ succession_gender_laws = { ai_will_do = { if = { limit = { + exists = primary_title primary_title.tier > tier_county faith = { NOT = { @@ -1107,7 +1288,7 @@ succession_gender_laws = { trigger_if = { limit = { is_independent_ruler = no - has_government = administrative_government + government_has_flag = government_is_administrative } top_liege = { has_realm_law = female_preference_law } } @@ -1127,7 +1308,7 @@ succession_gender_laws = { trigger_if = { limit = { is_independent_ruler = no - has_government = administrative_government + government_has_flag = government_is_administrative } top_liege = { has_realm_law = female_preference_law } } @@ -1169,7 +1350,7 @@ succession_gender_laws = { trigger_if = { limit = { is_independent_ruler = no - has_government = administrative_government + government_has_flag = government_is_administrative } top_liege = { has_realm_law = female_only_law } } @@ -1203,7 +1384,7 @@ succession_gender_laws = { trigger_if = { limit = { is_independent_ruler = no - has_government = administrative_government + government_has_flag = government_is_administrative } top_liege = { has_realm_law = female_only_law } } diff --git a/common/laws/01_title_succession_laws.txt b/common/laws/01_title_succession_laws.txt index 7c946fb3..aa1630a0 100644 --- a/common/laws/01_title_succession_laws.txt +++ b/common/laws/01_title_succession_laws.txt @@ -1,5 +1,5 @@ title_succession_laws = { - #Default Feudal Elective + # Default Feudal Elective feudal_elective_succession_law = { can_have = { government_has_flag = government_is_feudal @@ -30,7 +30,7 @@ } } - #HRE Succession + # HRE Succession princely_elective_succession_law = { can_have = { OR = { @@ -64,7 +64,7 @@ } } - #Witenagemot + # Witenagemot saxon_elective_succession_law = { can_have = { OR = { @@ -95,7 +95,7 @@ } } - #Thing + # Thing scandinavian_elective_succession_law = { can_have = { OR = { @@ -126,7 +126,7 @@ } } - #Tanistry + # Tanistry gaelic_elective_succession_law = { can_have = { OR = { @@ -163,7 +163,7 @@ } } - #Jirga elective + # Jirga elective tribal_elective_succession_law = { #FOR FP3 can_have = { OR = { @@ -194,7 +194,7 @@ } } - #Player Heir + # Player Heir temporal_head_of_faith_succession_law = { can_title_have = { is_temporal_head_of_faith_trigger = yes @@ -213,7 +213,7 @@ } } - #Noble Family Succession + # Noble Family Succession noble_family_succession_law = { can_title_have = { is_noble_family_title = yes @@ -229,4 +229,49 @@ } flag = can_designate_heirs } + + # Law of the Land Title Succession + # Applied in on_title_gain when a county title's capital province has required heir government types defined and the new holder does not meet the requirement. + law_of_the_land_succession_law = { + can_title_have = { + tier = tier_county + title_province = { + holding_type = { + has_required_heir_governments = yes + NOT = { + any_required_heir_government_type = { + this = root.holder.government_type + } + } + } + } + } + # Never show this in the UI, just apply it through script + should_show_for_title = { always = no } + can_remove_from_title = { always = no } + succession = { + order_of_succession = generate_from_template + } + } + #Confederation elective + confederation_elective_succession_law = { + can_title_have = { + tier >= tier_kingdom + } + should_show_for_title = { always = no } + succession = { + order_of_succession = election + election_type = confederation_elective + } + flag = elective_succession_law + title_allegiance_opinion = 10 + revoke_cost = { + prestige = change_title_succession_law_prestige_cost + } + pass_cost = { + prestige = change_title_succession_law_prestige_cost + } + } } + + diff --git a/common/men_at_arms_types/00_cultural_maa_types.txt b/common/men_at_arms_types/00_cultural_maa_types.txt new file mode 100644 index 00000000..095a6c85 --- /dev/null +++ b/common/men_at_arms_types/00_cultural_maa_types.txt @@ -0,0 +1,1233 @@ +# standard costs +@maa_buy_cost = 150 +@maa_low_maintenance_cost = 1.0 +@maa_high_maintenance_cost = 5.0 +@cultural_maa_extra_ai_score = 80 # Equivalent to having 8 extra regiments beyond what the code scoring would indicate (see NEGATIVE_SCORE_PER_EXISTING_REGIMENT) + +# Must be synced between files with the values located at "# Provisions Costs #". +@provisions_cost_infantry_cheap = 3 +@provisions_cost_infantry_moderate = 7 +@provisions_cost_infantry_expensive = 12 +@provisions_cost_infantry_bankrupting = 15 + +@provisions_cost_cavalry_cheap = 7 +@provisions_cost_cavalry_moderate = 15 +@provisions_cost_cavalry_expensive = 21 +@provisions_cost_cavalry_bankrupting = 30 + +@provisions_cost_special_cheap = 6 +@provisions_cost_special_moderate = 12 +@provisions_cost_special_expensive = 18 +@provisions_cost_special_bankrupting = 24 + +huscarl = { + type = heavy_infantry + + damage = 40 + toughness = 26 + pursuit = 0 + screen = 24 + + terrain_bonus = { + taiga = { damage = 8 } + forest = { damage = 8 } + } + + counters = { + pikemen = 1 + archers = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_huscarls } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + winter_bonus = { + normal_winter = { toughness = 6 screen = 6 } + harsh_winter = { toughness = 6 screen = 6 } + } + + buy_cost = { gold = huscarls_recruitment_cost } + low_maintenance_cost = { gold = huscarls_low_maint_cost } + high_maintenance_cost = { gold = huscarls_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = danish_huskarls +} + +landsknecht = { + type = pikemen + + damage = 30 + toughness = 24 + pursuit = 0 + screen = 0 + + terrain_bonus = { + mountains = { damage = 5 toughness = 12 } + desert_mountains = { damage = 5 toughness = 12 } + hills = { damage = 3 toughness = 8 } + } + + counters = { + pikemen = 0.5 + light_cavalry = 2 + heavy_cavalry = 2 + } + + buy_cost = { gold = landsknecht_recruitment_cost } + low_maintenance_cost = { gold = landsknecht_low_maint_cost } + high_maintenance_cost = { gold = landsknecht_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = pikemen +} + +longbowmen = { + type = archers + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_longbowmen } + } + + damage = 20 + toughness = 8 + pursuit = 0 + screen = 0 + + terrain_bonus = { + hills = { damage = 12 toughness = 4 } + } + + counters = { + skirmishers = 1 + heavy_cavalry = 1 + } + + buy_cost = { gold = longbowmen_recruitment_cost } + low_maintenance_cost = { gold = longbowmen_low_maint_cost } + high_maintenance_cost = { gold = longbowmen_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = bowmen +} + +goedendag = { + type = skirmishers + + damage = 13 + toughness = 18 + pursuit = 0 + screen = 16 + + counters = { + heavy_infantry = 1 + heavy_cavalry = 1 + } + + buy_cost = { gold = goedendag_recruitment_cost } + low_maintenance_cost = { gold = goedendag_low_maint_cost } + high_maintenance_cost = { gold = goedendag_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = skirmishers +} + +gendarme = { + type = heavy_cavalry + + damage = 125 + toughness = 40 + pursuit = 20 + screen = 10 + + terrain_bonus = { + plains = { damage = 30 } + drylands = { damage = 30 } + hills = { damage = -10 } + jungle = { damage = -25 } + mountains = { damage = -50 } + desert_mountains = { damage = -50 } + wetlands = { damage = -75 } + } + + counters = { + archers = 1 + } + + winter_bonus = { + normal_winter = { damage = -15 toughness = -5 } + harsh_winter = { damage = -30 toughness = -10 } + } + + buy_cost = { gold = gendarme_recruitment_cost } + low_maintenance_cost = { gold = gendarme_low_maint_cost } + high_maintenance_cost = { gold = gendarme_high_maint_cost } + provision_cost = @provisions_cost_cavalry_expensive + + stack = 50 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = heavy_cavalry +} + +chasseur = { + type = light_cavalry + + damage = 40 + toughness = 15 + pursuit = 40 + screen = 15 + + terrain_bonus = { + plains = { damage = 10 } + drylands = { damage = 10 } + desert = { damage = 10 } + hills = { damage = -5 } + mountains = { damage = -25 } + desert_mountains = { damage = -25 } + wetlands = { damage = -30 toughness = -10 pursuit = -25 screen = -15 } + } + + counters = { + archers = 1 + } + + winter_bonus = { + harsh_winter = { damage = -5 toughness = -2 } + } + + buy_cost = { gold = chasseur_recruitment_cost } + low_maintenance_cost = { gold = chasseur_low_maint_cost } + high_maintenance_cost = { gold = chasseur_high_maint_cost } + provision_cost = @provisions_cost_cavalry_moderate + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = light_cavalry +} + +picchieri = { + type = pikemen + + damage = 40 + toughness = 24 + pursuit = 0 + screen = 0 + + terrain_bonus = { + mountains = { toughness = 12 } + desert_mountains = { toughness = 12 } + hills = { toughness = 10 } + } + + counters = { + light_cavalry = 1 + heavy_cavalry = 1 + camel_cavalry = 1 + elephant_cavalry = 1 + } + + buy_cost = { gold = picchieri_recruitment_cost } + low_maintenance_cost = { gold = picchieri_low_maint_cost } + high_maintenance_cost = { gold = picchieri_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = pikemen +} + +praetorian = { + type = heavy_infantry + + damage = 60 + toughness = 30 + pursuit = 0 + screen = 20 + + counters = { + pikemen = 1 + } + + buy_cost = { gold = praetorian_recruitment_cost } + low_maintenance_cost = { gold = praetorian_low_maint_cost } + high_maintenance_cost = { gold = praetorian_high_maint_cost } + provision_cost = @provisions_cost_infantry_bankrupting + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = heavy_infantry +} + +caballero = { + type = light_cavalry + + damage = 22 + toughness = 16 + pursuit = 30 + screen = 50 + + terrain_bonus = { + hills = { damage = 15 toughness = 10 } + plains = { damage = 10 } + drylands = { damage = 10 } + mountains = { damage = -8 pursuit = -10 } + desert_mountains = { damage = -12 pursuit = -20 } + wetlands = { damage = -15 toughness = -10 pursuit = -20 screen = -20 } + } + + counters = { + archers = 1 + } + + winter_bonus = { + harsh_winter = { damage = -5 toughness = -2 } + } + + buy_cost = { gold = caballero_recruitment_cost } + low_maintenance_cost = { gold = caballero_low_maint_cost } + high_maintenance_cost = { gold = caballero_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + stack = 100 + ai_quality = { value = @[cultural_maa_extra_ai_score + 20] } + icon = light_cavalry +} + +monaspa = { + type = heavy_cavalry + + damage = 110 + toughness = 30 + pursuit = 25 + screen = 10 + + terrain_bonus = { + hills = { damage = 20 pursuit = 10 } + mountains = { damage = 20 pursuit = 10 } + desert_mountains = { damage = -30 } + wetlands = { damage = -80 toughness = -15 pursuit = -20 } + } + + counters = { + archers = 1 + } + + winter_bonus = { + normal_winter = { damage = -10 toughness = -5 } + harsh_winter = { damage = -20 toughness = -5 } + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_monaspa } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + buy_cost = { gold = monaspa_recruitment_cost } + low_maintenance_cost = { gold = monaspa_low_maint_cost } + high_maintenance_cost = { gold = monaspa_high_maint_cost } + provision_cost = @provisions_cost_cavalry_moderate + + stack = 50 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = monaspa +} + +cataphract = { + type = heavy_cavalry + + damage = 125 + toughness = 35 + pursuit = 10 + screen = 0 + + terrain_bonus = { + plains = { damage = 30 toughness = 5 } + drylands = { damage = 30 } + hills = { damage = -10 } + mountains = { damage = -50 } + desert_mountains = { damage = -50 } + wetlands = { damage = -80 toughness = -15 pursuit = -10 } + } + + counters = { + archers = 1 + } + + winter_bonus = { + normal_winter = { damage = -15 toughness = -5 } + harsh_winter = { damage = -30 toughness = -10 } + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_cataphract } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + buy_cost = { gold = cataphract_recruitment_cost } + low_maintenance_cost = { gold = cataphract_low_maint_cost } + high_maintenance_cost = { gold = cataphract_high_maint_cost } + provision_cost = @provisions_cost_cavalry_bankrupting + + stack = 50 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = cataphracts +} + +hobelar = { + type = light_cavalry + + damage = 22 + toughness = 15 + pursuit = 50 + screen = 30 + + terrain_bonus = { + forest = { damage = 15 } + hills = { damage = 10 } + mountains = { damage = -10 pursuit = -30 } + desert_mountains = { damage = -15 pursuit = -30 } + wetlands = { damage = -10 pursuit = -20 screen = -15 } + } + + counters = { + archers = 1 + } + + winter_bonus = { + harsh_winter = { damage = -5 } + } + + buy_cost = { gold = hobelar_recruitment_cost } + low_maintenance_cost = { gold = hobelar_low_maint_cost } + high_maintenance_cost = { gold = hobelar_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = light_cavalry +} + +schiltron = { + type = pikemen + + damage = 36 + toughness = 28 + pursuit = 0 + screen = 0 + + terrain_bonus = { + mountains = { toughness = 12 } + desert_mountains = { toughness = 12 } + hills = { toughness = 8 } + plains = { damage = 8 } + } + + counters = { + light_cavalry = 1 + heavy_cavalry = 1 + } + + buy_cost = { gold = schiltron_recruitment_cost } + low_maintenance_cost = { gold = schiltron_low_maint_cost } + high_maintenance_cost = { gold = schiltron_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = pikemen +} + +metsanvartija = { + type = archers + + damage = 30 + toughness = 14 + pursuit = 10 + screen = 10 + + terrain_bonus = { + forest = { damage = 10 toughness = 4 } + taiga = { damage = 10 toughness = 4 } + } + + counters = { + skirmishers = 1 + } + + winter_bonus = { + normal_winter = { toughness = 4 screen = 8 } + harsh_winter = { toughness = 4 screen = 8 } + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_metsanvartija } + } + + buy_cost = { gold = metsanvartija_recruitment_cost } + low_maintenance_cost = { gold = metsanvartija_low_maint_cost } + high_maintenance_cost = { gold = metsanvartija_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = bowmen +} + +horse_archers = { + type = archer_cavalry + + damage = 36 + toughness = 18 + pursuit = 40 + screen = 30 + + terrain_bonus = { + steppe = { damage = 45 } + plains = { damage = 20 } + drylands = { damage = 20 } + jungle = { damage = -20 pursuit = -20 } + wetlands = { damage = -30 pursuit = -30 } + mountains = { damage = -30 pursuit = -30 } + desert_mountains = { damage = -30 pursuit = -30 } + } + + counters = { + skirmishers = 1 + heavy_infantry = 1 + } + + can_recruit = { + OR = { + AND = { + is_landless_adventurer = yes + has_perk = planned_cultivation_perk + location.county.culture ?= { culture_has_archer_cavalry_maa = yes } + } + culture = { has_cultural_parameter = unlock_maa_horse_archers } + mpo_can_recruit_nomad_maa_trigger = yes + } + } + + buy_cost = { gold = horse_archers_recruitment_cost } + low_maintenance_cost = { gold = horse_archers_low_maint_cost } + high_maintenance_cost = { gold = horse_archers_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + stack = 100 + ai_quality = { + value = @cultural_maa_extra_ai_score + add = 60 #I mean... they're horse archers + } + icon = horse_archers +} + +ayyar = { + type = heavy_infantry + + damage = 35 + toughness = 22 + pursuit = 12 + screen = 0 + + counters = { + pikemen = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_ayyar } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + buy_cost = { gold = ayyar_recruitment_cost } + low_maintenance_cost = { gold = ayyar_low_maint_cost } + high_maintenance_cost = { gold = ayyar_high_maint_cost } + provision_cost = @provisions_cost_infantry_expensive + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = ayyar +} + +mubarizun = { + type = heavy_infantry + + damage = 45 + toughness = 25 + pursuit = 0 + screen = 0 + + counters = { + pikemen = 1 + heavy_infantry = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_mubarizun } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + buy_cost = { gold = mubarizun_recruitment_cost } + low_maintenance_cost = { gold = mubarizun_low_maint_cost } + high_maintenance_cost = { gold = mubarizun_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @[cultural_maa_extra_ai_score - 20] } + icon = mubarizun +} + +mulaththamun = { #Murabit Cavalry + type = light_cavalry + + damage = 22 + toughness = 15 + pursuit = 30 + screen = 40 + + terrain_bonus = { + drylands = { damage = 10 toughness = 5 screen = 10 pursuit = 5 } + desert = { damage = 10 toughness = 5 screen = 20 pursuit = 10 } + plains = { damage = 10 toughness = 3 screen = 5 pursuit = 5 } + oasis = { damage = 10 } + + mountains = { damage = -8 pursuit = -10 } + desert_mountains = { damage = -12 pursuit = -20 } + wetlands = { damage = -15 toughness = -10 pursuit = -20 screen = -20 + } + } + + counters = { + archers = 1 + } + + winter_bonus = { + harsh_winter = { damage = -5 toughness = -2 } + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_mulaththamun } + } + + buy_cost = { gold = mulaththamun_recruitment_cost } + low_maintenance_cost = { gold = mulaththamun_low_maint_cost } + high_maintenance_cost = { gold = mulaththamun_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + stack = 100 + ai_quality = { value = @[cultural_maa_extra_ai_score + 20] } + icon = light_cavalry +} + +archers_of_the_nile = { #Nile Archers + type = archers + + damage = 30 + toughness = 14 + pursuit = 10 + screen = 10 + + terrain_bonus = { + floodplains = { damage = 15 toughness = 15 pursuit = 10 screen = 10 } + oasis = { damage = 15 pursuit = 5 screen = 5 } + drylands = { damage = 10 toughness = 10 } + desert = { damage = -5 toughness = -5 } + } + + counters = { + skirmishers = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_archers_of_the_nile } + } + + buy_cost = { gold = archers_of_the_nile_recruitment_cost } + low_maintenance_cost = { gold = archers_of_the_nile_low_maint_cost } + high_maintenance_cost = { gold = archers_of_the_nile_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = bowmen +} + +paiks = { #Indian Footmen - carrying bows but also swords and spears. + type = archers + + damage = 28 + toughness = 16 + pursuit = 10 + screen = 10 + + terrain_bonus = { + jungle = { damage = 15 toughness = 15 pursuit = 10 screen = 10 } + forest = { damage = 15 pursuit = 5 screen = 5 } + hills = { damage = 10 toughness = 10 } + } + + counters = { + elephant_cavalry = 1 + } + + buy_cost = { gold = paiks_recruitment_cost } + low_maintenance_cost = { gold = paiks_low_maint_cost } + high_maintenance_cost = { gold = paiks_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @[cultural_maa_extra_ai_score - 40] } + icon = bowmen +} + +druzhina = { + type = heavy_infantry + + damage = 40 + toughness = 30 + pursuit = 0 + screen = 30 + + counters = { + pikemen = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_druzhina } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + buy_cost = { gold = druzhina_recruitment_cost } + low_maintenance_cost = { gold = druzhina_low_maint_cost } + high_maintenance_cost = { gold = druzhina_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = heavy_infantry +} + +hussar = { + type = light_cavalry + + damage = 25 + toughness = 15 + pursuit = 60 + screen = 20 + + terrain_bonus = { + plains = { damage = 15 } + drylands = { damage = 15 } + hills = { damage = -15 } + mountains = { damage = -15 pursuit = -40 } + desert_mountains = { damage = -20 pursuit = -50 } + wetlands = { damage = -15 toughness = -10 pursuit = -50 screen = -20 } + } + + counters = { + archers = 1 + } + + winter_bonus = { + harsh_winter = { damage = -5 } + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_hussar } + } + + buy_cost = { gold = hussar_recruitment_cost } + low_maintenance_cost = { gold = hussar_low_maint_cost } + high_maintenance_cost = { gold = hussar_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + stack = 100 + ai_quality = { value = @[cultural_maa_extra_ai_score + 10] } + icon = light_cavalry +} + +horn_warrior = { + type = skirmishers + + damage = 12 + toughness = 16 + pursuit = 0 + screen = 20 + + terrain_bonus = { + mountains = { damage = 10 toughness = 10 } + desert_mountains = { damage = 10 toughness = 10 } + hills = { damage = 4 toughness = 6 } + } + + counters = { + heavy_infantry = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_horn_warrior } + } + + buy_cost = { gold = horn_warrior_recruitment_cost } + low_maintenance_cost = { gold = horn_warrior_low_maint_cost } + high_maintenance_cost = { gold = horn_warrior_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = skirmishers +} + +bush_hunter = { + type = archers + + damage = 30 + toughness = 12 + pursuit = 5 + screen = 0 + + terrain_bonus = { + jungle = { damage = 8 toughness = 4 } + forest = { damage = 8 toughness = 4 } + hills = { damage = 8 toughness = 4 } + } + + counters = { + skirmishers = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_bush_hunter } + } + + buy_cost = { gold = bush_hunter_recruitment_cost } + low_maintenance_cost = { gold = bush_hunter_low_maint_cost } + high_maintenance_cost = { gold = bush_hunter_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = bowmen +} + +shomer = { + type = skirmishers + + damage = 10 + toughness = 24 + pursuit = 0 + screen = 40 + + counters = { + heavy_infantry = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_shomer } + } + + buy_cost = { gold = shomer_recruitment_cost } + low_maintenance_cost = { gold = shomer_low_maint_cost } + high_maintenance_cost = { gold = shomer_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = skirmishers +} + +garudas = { + type = heavy_infantry + + damage = 42 + toughness = 22 + pursuit = 24 + screen = 0 + + terrain_bonus = { + jungle = { damage = 8 } + forest = { damage = 8 } + } + + counters = { + pikemen = 1 + archers = 1 + } + + buy_cost = { gold = garudas_recruitment_cost } + low_maintenance_cost = { gold = garudas_low_maint_cost } + high_maintenance_cost = { gold = garudas_high_maint_cost } + provision_cost = @provisions_cost_infantry_expensive + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_garudas } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = heavy_infantry +} + +khandayat = { + type = heavy_infantry + + damage = 42 + toughness = 22 + pursuit = 0 + screen = 0 + + terrain_bonus = { + jungle = { damage = 12 toughness = 8 } + } + + counters = { + light_cavalry = 1 + pikemen = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_khandayat } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + buy_cost = { gold = khandayat_recruitment_cost } + low_maintenance_cost = { gold = khandayat_low_maint_cost } + high_maintenance_cost = { gold = khandayat_high_maint_cost } + provision_cost = @provisions_cost_infantry_bankrupting + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = heavy_infantry +} + +mountaineer = { + type = heavy_infantry + + damage = 40 + toughness = 26 + pursuit = 0 + screen = 0 + + terrain_bonus = { + mountains = { damage = 12 toughness = 12 } + desert_mountains = { damage = 12 toughness = 12 } + } + + counters = { + pikemen = 1 + } + + winter_bonus = { + normal_winter = { damage = 5 } + harsh_winter = { damage = 5 } + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_mountaineer } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + buy_cost = { gold = mountaineer_recruitment_cost } + low_maintenance_cost = { gold = mountaineer_low_maint_cost } + high_maintenance_cost = { gold = mountaineer_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = heavy_infantry +} + +sahel_horsemen = { + type = light_cavalry + + damage = 22 + toughness = 15 + pursuit = 30 + screen = 30 + + terrain_bonus = { + drylands = { damage = 15 toughness = 3 } + floodplains = { damage = 15 toughness = 3 } + desert = { damage = 10 } + oasis = { damage = 10 } + hills = { damage = -10 pursuit = -10 } + desert_mountains = { damage = -10 pursuit = -20 } + mountains = { damage = -15 pursuit = -20 } + wetlands = { damage = -15 toughness = -10 pursuit = -30 screen = -30 } + } + + counters = { + archers = 1 + heavy_infantry = 1 + } + + winter_bonus = { + harsh_winter = { damage = -5 toughness = -2 } + } + + buy_cost = { gold = sahel_rider_recruitment_cost } + low_maintenance_cost = { gold = sahel_rider_low_maint_cost } + high_maintenance_cost = { gold = sahel_rider_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + stack = 100 + ai_quality = { value = @[cultural_maa_extra_ai_score + 30] } + icon = light_cavalry +} + +guinea_warrior = { #AKA Guinean uplander + type = skirmishers + + damage = 18 + toughness = 14 + pursuit = 0 + screen = 20 + + terrain_bonus = { + forest = { damage = 10 toughness = 8 } + hills = { damage = 6 toughness = 4 } + drylands = { damage = 6 toughness = 4 } + } + + counters = { + heavy_infantry = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_guinea_warrior } + } + + buy_cost = { gold = guinea_warrior_recruitment_cost } + low_maintenance_cost = { gold = guinea_warrior_low_maint_cost } + high_maintenance_cost = { gold = guinea_warrior_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = skirmishers +} + +sarawit = { #AKA Ethiopian mountaineer + type = heavy_infantry + + damage = 32 + toughness = 26 + pursuit = 0 + screen = 10 + + terrain_bonus = { + mountains = { damage = 12 toughness = 10 } + desert_mountains = { damage = 10 toughness = 8 } + hills = { damage = 8 toughness = 5 } + drylands = { screen = -10 } + desert = { toughness = -10 screen = -10 } + } + + counters = { + light_cavalry = 1 + } + + buy_cost = { gold = sarawit_recruitment_cost } + low_maintenance_cost = { gold = sarawit_low_maint_cost } + high_maintenance_cost = { gold = sarawit_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = heavy_infantry +} + +abudrar = { #AKA Jabali - Berber mountaineer + type = skirmishers + + damage = 20 + toughness = 16 + pursuit = 20 + screen = 10 + + terrain_bonus = { + desert_mountains = { damage = 10 toughness = 8 } + mountains = { damage = 8 toughness = 6 } + hills = { damage = 8 toughness = 6 } + desert = { pursuit = -10 screen = -10 } + } + + counters = { + light_cavalry = 1 + heavy_infantry = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_abudrar } + } + + buy_cost = { gold = abudrar_recruitment_cost } + low_maintenance_cost = { gold = abudrar_low_maint_cost } + high_maintenance_cost = { gold = abudrar_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = skirmishers +} + +zbrojnosh = { + type = heavy_infantry + + damage = 34 + toughness = 20 + pursuit = 0 + screen = 10 + + terrain_bonus = { + hills = { damage = 8 toughness = 5 } + mountains = { damage = 6 } + forest = { damage = 6 } + wetlands = { damage = -10 pursuit = -10 } + } + + counters = { + pikemen = 1 + archers = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_zbrojnosh } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + buy_cost = { gold = zbrojnosh_recruitment_cost } + low_maintenance_cost = { gold = zbrojnosh_low_maint_cost } + high_maintenance_cost = { gold = zbrojnosh_high_maint_cost } + provision_cost = @provisions_cost_infantry_expensive + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = heavy_infantry +} + +palace_guards = { + type = heavy_infantry + + damage = 38 + toughness = 24 + pursuit = 0 + screen = 20 + + terrain_bonus = { + jungle = { damage = 10 toughness = 6 } + hills = { damage = 8 toughness = 4 } + } + + counters = { + pikemen = 2 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_palace_guards } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + buy_cost = { gold = palace_guards_recruitment_cost } + low_maintenance_cost = { gold = palace_guards_low_maint_cost } + high_maintenance_cost = { gold = palace_guards_high_maint_cost } + provision_cost = @provisions_cost_infantry_bankrupting + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = heavy_infantry +} + +chu_ko_nu = { + type = archers + + damage = 30 + toughness = 20 + pursuit = 0 + screen = 0 + + terrain_bonus = { + hills = { damage = 10 toughness = 4 } + mountains = { damage = 8 toughness = 2 } + desert_mountains = { damage = 8 toughness = 2 } + } + + counters = { + skirmishers = 1 + archer_cavalry = 0.5 + } + + buy_cost = { gold = chu_ko_nu_recruitment_cost } + low_maintenance_cost = { gold = chu_ko_nu_low_maint_cost } + high_maintenance_cost = { gold = chu_ko_nu_high_maint_cost } + provision_cost = @provisions_cost_infantry_expensive + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = crossbowmen +} + +guanch_vaulter = { + type = skirmishers + + damage = 10 + toughness = 12 + pursuit = 15 + screen = 20 + siege_value = 0.1 + + terrain_bonus = { + hills = { damage = 4 toughness = 6 } + mountains = { damage = 4 pursuit = 6 } + desert_mountains = { damage = 4 pursuit = 6 } + wetlands = { damage = 4 pursuit = 6 } + } + + counters = { + heavy_infantry = 1 + } + + buy_cost = { gold = guanch_vaulter_recruitment_cost } + low_maintenance_cost = { gold = guanch_vaulter_low_maint_cost } + high_maintenance_cost = { gold = guanch_vaulter_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + + stack = 100 + ai_quality = { value = culture_ai_weight_skirmishers } + icon = skirmishers +} diff --git a/common/men_at_arms_types/00_fp3_maa_types.txt b/common/men_at_arms_types/00_fp3_maa_types.txt new file mode 100644 index 00000000..3cc91139 --- /dev/null +++ b/common/men_at_arms_types/00_fp3_maa_types.txt @@ -0,0 +1,206 @@ +# standard costs +@maa_buy_cost = 150 +@maa_low_maintenance_cost = 1.0 +@maa_high_maintenance_cost = 5.0 +@cultural_maa_extra_ai_score = 60 # Equivalent to having 6 extra regiments beyond what the code scoring would indicate (see NEGATIVE_SCORE_PER_EXISTING_REGIMENT) + +# Must be synced between files with the values located at "# Provisions Costs #". +@provisions_cost_infantry_cheap = 3 +@provisions_cost_infantry_moderate = 7 +@provisions_cost_infantry_expensive = 12 +@provisions_cost_infantry_bankrupting = 15 + +@provisions_cost_cavalry_cheap = 7 +@provisions_cost_cavalry_moderate = 15 +@provisions_cost_cavalry_expensive = 21 +@provisions_cost_cavalry_bankrupting = 30 + +@provisions_cost_special_cheap = 6 +@provisions_cost_special_moderate = 12 +@provisions_cost_special_expensive = 18 +@provisions_cost_special_bankrupting = 24 + +asawira = { #Iranian knights in early caliphal armies. Can be restored as a military unit with Khvarenah 4 dynasty legacy perk. + type = archer_cavalry + + damage = 90 + toughness = 35 + pursuit = 35 + screen = 10 + + terrain_bonus = { + plains = { damage = 30 } + drylands = { damage = 30 } + desert_mountains = { damage = 10 pursuit = 10 } + hills = { damage = -10 } + mountains = { damage = -50 } + wetlands = { damage = -50 toughness = -15 pursuit = -20 } + } + + counters = { + skirmishers = 2 + heavy_infantry = 2 + } + + winter_bonus = { + normal_winter = { damage = -15 toughness = -5 } + harsh_winter = { damage = -30 toughness = -10 } + } + + can_recruit = { + exists = dynasty + dynasty = { + has_dynasty_perk = fp3_khvarenah_legacy_4 + } + } + + buy_cost = { gold = asawira_recruitment_cost } + low_maintenance_cost = { gold = asawira_low_maint_cost } + high_maintenance_cost = { gold = asawira_high_maint_cost } + provision_cost = @provisions_cost_infantry_expensive + + stack = 50 + ai_quality = { value = @[cultural_maa_extra_ai_score + 30] } + icon = asawira +} + +tarkhan = { + type = heavy_cavalry + + damage = 110 + toughness = 30 + pursuit = 30 + screen = 10 + + terrain_bonus = { + oasis = { damage = 30 } + drylands = { damage = 25 } + desert = { damage = 10 pursuit = 10 } + mountains = { damage = -30 } + wetlands = { damage = -80 toughness = -15 pursuit = -20 } + } + + counters = { + heavy_infantry = 1 + heavy_cavalry = 0.5 + } + + winter_bonus = { + normal_winter = { damage = -10 toughness = -5 } + harsh_winter = { damage = -20 toughness = -5 } + } + + can_recruit = { + OR = { + AND = { + is_landless_adventurer = yes + has_perk = planned_cultivation_perk + location.culture ?= { has_cultural_parameter = unlock_maa_tarkhan } + } + culture = { has_cultural_parameter = unlock_maa_tarkhan } + } + } + + buy_cost = { gold = cataphract_recruitment_cost } + low_maintenance_cost = { gold = cataphract_low_maint_cost } + high_maintenance_cost = { gold = cataphract_high_maint_cost } + provision_cost = @provisions_cost_cavalry_expensive + + stack = 50 + ai_quality = { value = @[cultural_maa_extra_ai_score + 60] } + icon = tarkhan + +} + +zupin_warrior = { + type = pikemen + + damage = 16 + toughness = 16 + pursuit = 0 + screen = 10 + + can_recruit = { + OR = { + AND = { + is_landless_adventurer = yes + has_perk = planned_cultivation_perk + location.culture ?= { has_cultural_parameter = unlock_maa_zupin_warrior } + } + culture = { has_cultural_parameter = unlock_maa_zupin_warrior } + } + } + + terrain_bonus = { + mountains = { toughness = 12 } + desert_mountains = { toughness = 12 } + hills = { damage = 4 toughness = 8 } + forest = { damage = 4 toughness = 8 pursuit = 4 } + } + + counters = { + heavy_cavalry = 0.5 + heavy_infantry = 1 + light_cavalry = 1 + } + + winter_bonus = { + normal_winter = { damage = 4 pursuit = 5 } + } + + buy_cost = { gold = bondi_recruitment_cost } + low_maintenance_cost = { gold = bondi_low_maint_cost } + high_maintenance_cost = { gold = bondi_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { value = @[cultural_maa_extra_ai_score + 20] } + icon = zupin_spearmen +} + +tawashi = { + type = light_cavalry + + damage = 25 + toughness = 15 + pursuit = 30 + screen = 30 + + terrain_bonus = { + plains = { damage = 10 } + drylands = { damage = 10 } + hills = { damage = 10 } + mountains = { damage = 10 pursuit = 10 } + desert_mountains = { damage = 10 pursuit = 10 } + wetlands = { damage = -15 toughness = -10 pursuit = -30 screen = -30 } + } + + counters = { + archers = 1 + heavy_infantry = 1 + } + + can_recruit = { + OR = { + AND = { + is_landless_adventurer = yes + has_perk = planned_cultivation_perk + location.culture ?= { has_cultural_parameter = unlock_maa_tawashi } + } + culture = { has_cultural_parameter = unlock_maa_tawashi } + } + } + + winter_bonus = { + harsh_winter = { damage = -5 toughness = -3 } + } + + buy_cost = { gold = tawashi_recruitment_cost } + low_maintenance_cost = { gold = tawashi_low_maint_cost } + high_maintenance_cost = { gold = tawashi_high_maint_cost } + provision_cost = @provisions_cost_cavalry_moderate + + stack = 100 + ai_quality = { value = @[cultural_maa_extra_ai_score + 40] } + icon = tawashi +} diff --git a/common/men_at_arms_types/00_holy_order_maa_types.txt b/common/men_at_arms_types/00_holy_order_maa_types.txt new file mode 100644 index 00000000..3a737a0b --- /dev/null +++ b/common/men_at_arms_types/00_holy_order_maa_types.txt @@ -0,0 +1,41 @@ +@maa_buy_cost = 150 + +# Must be synced between files with the values located at "# Provisions Costs #". +@provisions_cost_infantry_cheap = 3 +@provisions_cost_infantry_moderate = 7 +@provisions_cost_infantry_expensive = 12 +@provisions_cost_infantry_bankrupting = 15 + +@provisions_cost_cavalry_cheap = 7 +@provisions_cost_cavalry_moderate = 15 +@provisions_cost_cavalry_expensive = 21 +@provisions_cost_cavalry_bankrupting = 30 + +@provisions_cost_special_cheap = 6 +@provisions_cost_special_moderate = 12 +@provisions_cost_special_expensive = 18 +@provisions_cost_special_bankrupting = 24 + +teutonic_knights = { # Actually all Christian knightly orders, not just the Teutons. + type = heavy_infantry + + can_recruit = { always = no } + + # Slightly stronger than normal Heavy Infantry MaA, to represent zeal & dedication to the cause. + damage = 36 + toughness = 26 + pursuit = 0 + screen = 0 + + buy_cost = { gold = heavy_infantry_recruitment_cost } + low_maintenance_cost = { gold = heavy_infantry_low_maint_cost } + high_maintenance_cost = { gold = heavy_infantry_high_maint_cost } + provision_cost = @provisions_cost_infantry_expensive + + counters = { + pikemen = 1 + } + + stack = 100 + icon = heavy_infantry +} diff --git a/common/men_at_arms_types/00_maa_types.txt b/common/men_at_arms_types/00_maa_types.txt index 57ddf926..591de488 100644 --- a/common/men_at_arms_types/00_maa_types.txt +++ b/common/men_at_arms_types/00_maa_types.txt @@ -3,6 +3,22 @@ @maa_low_maintenance_cost = 1.0 @maa_high_maintenance_cost = 5.0 +# Must be synced between files with the values located at "# Provisions Costs #". +@provisions_cost_infantry_cheap = 3 +@provisions_cost_infantry_moderate = 7 +@provisions_cost_infantry_expensive = 12 +@provisions_cost_infantry_bankrupting = 15 + +@provisions_cost_cavalry_cheap = 7 +@provisions_cost_cavalry_moderate = 15 +@provisions_cost_cavalry_expensive = 21 +@provisions_cost_cavalry_bankrupting = 30 + +@provisions_cost_special_cheap = 6 +@provisions_cost_special_moderate = 12 +@provisions_cost_special_expensive = 18 +@provisions_cost_special_bankrupting = 24 + light_footmen = { type = skirmishers @@ -13,22 +29,32 @@ light_footmen = { terrain_bonus = { forest = { damage = 4 toughness = 6 } - flooded_forests = { damage = 2 toughness = 3 } taiga = { damage = 4 toughness = 6 } jungle = { damage = 4 toughness = 6 } - deep_jungle = { damage = 2 toughness = 3 } } counters = { heavy_infantry = 1 } + can_recruit = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + + should_show_when_unavailable = { + government_allows = subject_men_at_arms + } + buy_cost = { gold = skirmisher_recruitment_cost } low_maintenance_cost = { gold = skirmisher_low_maint_cost } high_maintenance_cost = { gold = skirmisher_high_maint_cost } - + provision_cost = @provisions_cost_infantry_cheap + holy_order_fallback = yes - + stack = 100 ai_quality = { value = culture_ai_weight_skirmishers } icon = skirmishers @@ -45,7 +71,6 @@ bowmen = { terrain_bonus = { hills = { damage = 10 toughness = 4 } forest = { toughness = 4 screen = 4 } - flooded_forests = { damage = 4 toughness = 6 } taiga = { toughness = 4 screen = 4 } } @@ -53,16 +78,28 @@ bowmen = { skirmishers = 1 } + can_recruit = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + + should_show_when_unavailable = { + government_allows = subject_men_at_arms + } + buy_cost = { gold = bowmen_recruitment_cost } low_maintenance_cost = { gold = bowmen_low_maint_cost } high_maintenance_cost = { gold = bowmen_high_maint_cost } - + provision_cost = @provisions_cost_infantry_moderate + holy_order_fallback = yes - + stack = 100 ai_quality = { value = culture_ai_weight_archers - value = counter_synergy_ai_weight_archers + add = counter_synergy_ai_weight_archers } } @@ -77,20 +114,32 @@ light_horsemen = { terrain_bonus = { plains = { damage = 15 } drylands = { damage = 15 } - salt_flats = { damage = 15 } hills = { damage = -5 } mountains = { damage = -10 pursuit = -20 } desert_mountains = { damage = -15 pursuit = -20 } wetlands = { damage = -15 toughness = -10 pursuit = -30 screen = -30 } - flooded_forests = { damage = -15 toughness = -10 pursuit = -30 screen = -30 } - tundra = { damage = -5 toughness = -5 screen = -5 } - arctic = { damage = -15 toughness = -10 pursuit = -30 screen = -30 } } counters = { archers = 1 } + can_recruit = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + + should_show_when_unavailable = { + government_allows = subject_men_at_arms + NOT = { has_access_to_maa = steppe_raiders } + } + + access_through_subject = { + NOT = { has_access_to_maa = steppe_raiders } + } + winter_bonus = { harsh_winter = { damage = -5 toughness = -2 } } @@ -98,13 +147,14 @@ light_horsemen = { buy_cost = { gold = light_cavalry_recruitment_cost } low_maintenance_cost = { gold = light_cavalry_low_maint_cost } high_maintenance_cost = { gold = light_cavalry_high_maint_cost } - + provision_cost = @provisions_cost_cavalry_cheap + holy_order_fallback = yes - + stack = 100 ai_quality = { value = culture_ai_weight_light_cavalry - value = counter_synergy_ai_weight_light_cavalry + add = counter_synergy_ai_weight_light_cavalry } icon = light_cavalry } @@ -126,18 +176,32 @@ pikemen_unit = { counters = { light_cavalry = 1 heavy_cavalry = 1 + camel_cavalry = 1 + elephant_cavalry = 1 + } + + can_recruit = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + + should_show_when_unavailable = { + government_allows = subject_men_at_arms } buy_cost = { gold = pikemen_recruitment_cost } low_maintenance_cost = { gold = pikemen_low_maint_cost } high_maintenance_cost = { gold = pikemen_high_maint_cost } - + provision_cost = @provisions_cost_infantry_expensive + holy_order_fallback = yes - + stack = 100 ai_quality = { value = culture_ai_weight_pikemen - value = counter_synergy_ai_weight_pikemen + add = counter_synergy_ai_weight_pikemen } icon = pikemen } @@ -156,17 +220,35 @@ armored_footmen = { counters = { pikemen = 1 } + + can_recruit = { + culture = { + has_innovation = innovation_quilted_armor + } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + should_show_when_unavailable = { + government_allows = subject_men_at_arms + } + buy_cost = { gold = heavy_infantry_recruitment_cost } low_maintenance_cost = { gold = heavy_infantry_low_maint_cost } high_maintenance_cost = { gold = heavy_infantry_high_maint_cost } - + provision_cost = @provisions_cost_infantry_moderate + holy_order_fallback = yes - + stack = 100 ai_quality = { value = culture_ai_weight_heavy_infantry - value = counter_synergy_ai_weight_heavy_infantry + add = counter_synergy_ai_weight_heavy_infantry } icon = heavy_infantry } @@ -180,10 +262,25 @@ onager = { siege_tier = 1 siege_value = 0.2 + + can_recruit = { + culture = { + has_innovation = innovation_catapult + } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + should_show_when_unavailable = { + government_allows = subject_men_at_arms + } + buy_cost = { gold = onager_recruitment_cost } low_maintenance_cost = { gold = onager_low_maint_cost } high_maintenance_cost = { gold = onager_high_maint_cost } + provision_cost = @provisions_cost_special_cheap stack = 10 allowed_in_hired_troops = no @@ -201,19 +298,36 @@ armored_horsemen = { terrain_bonus = { plains = { damage = 30 } drylands = { damage = 30 } - salt_flats = { damage = 15 } hills = { damage = -20 } mountains = { damage = -75 } desert_mountains = { damage = -75 } wetlands = { damage = -75 toughness = -10 pursuit = -10 } - flooded_forests = { damage = -75 toughness = -10 pursuit = -10 } - arctic = { damage = -10 toughness = -10 pursuit = -30 screen = -30 } } counters = { archers = 1 } + can_recruit = { + culture = { + has_innovation = innovation_arched_saddle + } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + + should_show_when_unavailable = { + government_allows = subject_men_at_arms + culture = { has_cultural_era_or_later = culture_era_early_medieval } + NOT = { has_access_to_maa = nomad_lancers } + } + + access_through_subject = { + NOT = { has_access_to_maa = nomad_lancers } + } + winter_bonus = { normal_winter = { damage = -10 toughness = -5 } harsh_winter = { damage = -20 toughness = -10 } @@ -222,6 +336,7 @@ armored_horsemen = { buy_cost = { gold = heavy_cavalry_recruitment_cost } low_maintenance_cost = { gold = heavy_cavalry_low_maint_cost } high_maintenance_cost = { gold = heavy_cavalry_high_maint_cost } + provision_cost = @provisions_cost_cavalry_expensive stack = 50 ai_quality = { value = culture_ai_weight_heavy_cavalry } @@ -237,10 +352,26 @@ mangonel = { siege_tier = 2 siege_value = 0.3 + + can_recruit = { + culture = { + has_innovation = innovation_mangonel + } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + should_show_when_unavailable = { + government_allows = subject_men_at_arms + culture = { has_cultural_era_or_later = culture_era_early_medieval } + } + buy_cost = { gold = mangonel_recruitment_cost } low_maintenance_cost = { gold = mangonel_low_maint_cost } high_maintenance_cost = { gold = mangonel_high_maint_cost } + provision_cost = @provisions_cost_special_moderate stack = 10 allowed_in_hired_troops = no @@ -260,17 +391,33 @@ crossbowmen = { plains = { toughness = -8 } drylands = { toughness = -8 } desert = { toughness = -8 } - salt_flats = { damage = -8 } } counters = { heavy_infantry = 1 heavy_cavalry = 1 + archer_cavalry = 0.5 + } + + can_recruit = { + culture = { + has_innovation = innovation_advanced_bowmaking + } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + + should_show_when_unavailable = { + government_allows = subject_men_at_arms + culture = { has_cultural_era_or_later = culture_era_high_medieval } } buy_cost = { gold = crossbowmen_recruitment_cost } low_maintenance_cost = { gold = crossbowmen_low_maint_cost } high_maintenance_cost = { gold = crossbowmen_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate ai_quality = { value = counter_synergy_ai_weight_archers @@ -290,10 +437,26 @@ trebuchet = { siege_tier = 3 siege_value = 0.4 + + can_recruit = { + culture = { + has_innovation = innovation_trebuchet + } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + should_show_when_unavailable = { + government_allows = subject_men_at_arms + culture = { has_cultural_era_or_later = culture_era_high_medieval } + } + buy_cost = { gold = trebuchet_recruitment_cost } low_maintenance_cost = { gold = trebuchet_low_maint_cost } high_maintenance_cost = { gold = trebuchet_high_maint_cost } + provision_cost = @provisions_cost_special_expensive stack = 10 allowed_in_hired_troops = no @@ -310,14 +473,29 @@ bombard = { siege_tier = 4 siege_value = 0.6 + + can_recruit = { + culture = { + has_innovation = innovation_bombard + } + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + should_show_when_unavailable = { + government_allows = subject_men_at_arms + culture = { has_cultural_era_or_later = culture_era_late_medieval } + } + buy_cost = { gold = bombard_recruitment_cost } low_maintenance_cost = { gold = bombard_low_maint_cost } high_maintenance_cost = { gold = bombard_high_maint_cost } + provision_cost = @provisions_cost_special_bankrupting stack = 10 allowed_in_hired_troops = no - } # Special @@ -328,6 +506,9 @@ house_guard = { dynasty = { has_dynasty_perk = warfare_legacy_5 } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } } damage = 40 @@ -343,8 +524,9 @@ house_guard = { buy_cost = { gold = 50 } low_maintenance_cost = { gold = 0 } high_maintenance_cost = { gold = 1 } + provision_cost = @provisions_cost_infantry_expensive - max_sub_regiments = 5 + max_regiments = 1 stack = 100 ai_quality = { value = 100 } diff --git a/common/men_at_arms_types/00_regional_maa_types.txt b/common/men_at_arms_types/00_regional_maa_types.txt new file mode 100644 index 00000000..b9c56ff4 --- /dev/null +++ b/common/men_at_arms_types/00_regional_maa_types.txt @@ -0,0 +1,106 @@ +# standard costs +@maa_buy_cost = 150 +@maa_low_maintenance_cost = 1.0 +@maa_high_maintenance_cost = 5.0 + +# Must be synced between files with the values located at "# Provisions Costs #". +@provisions_cost_infantry_cheap = 3 +@provisions_cost_infantry_moderate = 7 +@provisions_cost_infantry_expensive = 12 +@provisions_cost_infantry_bankrupting = 15 + +@provisions_cost_cavalry_cheap = 7 +@provisions_cost_cavalry_moderate = 15 +@provisions_cost_cavalry_expensive = 21 +@provisions_cost_cavalry_bankrupting = 30 + +@provisions_cost_special_cheap = 6 +@provisions_cost_special_moderate = 12 +@provisions_cost_special_expensive = 18 +@provisions_cost_special_bankrupting = 24 + +camel_rider = { + type = camel_cavalry + + damage = 22 + toughness = 15 + pursuit = 20 + screen = 20 + + terrain_bonus = { + desert = { damage = 20 toughness = 8 } + drylands = { damage = 15 toughness = 8 } + oasis = { damage = 15 } + floodplains = { damage = 5 } + hills = { damage = -10 } + desert_mountains = { damage = -10 pursuit = -10 } + mountains = { damage = -15 pursuit = -20 } + wetlands = { damage = -15 toughness = -10 pursuit = -20 screen = -20 } + } + + counters = { + light_cavalry = 1 + } + + winter_bonus = { + normal_winter = { damage = -3 } + harsh_winter = { damage = -5 toughness = -2 } + } + + buy_cost = { gold = camel_rider_recruitment_cost } + low_maintenance_cost = { gold = camel_rider_low_maint_cost } + high_maintenance_cost = { gold = camel_rider_high_maint_cost } + provision_cost = @provisions_cost_cavalry_expensive + + stack = 100 + ai_quality = { value = culture_ai_weight_camels } + icon = camel_riders +} + +war_elephant = { + type = elephant_cavalry + + damage = 250 + toughness = 50 + pursuit = 0 + screen = 0 + + siege_value = 0.1 + + terrain_bonus = { + jungle = { damage = 50 } + mountains = { damage = -100 } + desert_mountains = { damage = -100 } + wetlands = { damage = -150 toughness = -20 } + } + + counters = { + skirmishers = 2 + heavy_infantry = 2 + } + + winter_bonus = { + normal_winter = { damage = -30 toughness = -5 } + harsh_winter = { damage = -60 toughness = -10 } + } + + buy_cost = { gold = war_elephant_recruitment_cost } + low_maintenance_cost = { gold = war_elephant_low_maint_cost } + high_maintenance_cost = { gold = war_elephant_high_maint_cost } + provision_cost = @provisions_cost_cavalry_bankrupting + + can_recruit = { + OR = { + AND = { + culture ?= { has_innovation = innovation_elephantry } + NOT = { is_landless_adventurer = yes } + } + domicile ?= { has_domicile_parameter = camp_reinforce_elephant_regiments_anywhere } + } + } + + stack = 25 + hired_stack_size = 10 + ai_quality = { value = culture_ai_weight_elephants } + icon = war_elephants +} diff --git a/common/men_at_arms_types/01_accolade_maa_types.txt b/common/men_at_arms_types/01_accolade_maa_types.txt new file mode 100644 index 00000000..ff2f7154 --- /dev/null +++ b/common/men_at_arms_types/01_accolade_maa_types.txt @@ -0,0 +1,485 @@ +# standard costs +@maa_buy_cost = 150 +@maa_low_maintenance_cost = 1.0 +@maa_high_maintenance_cost = 3.5 +@cultural_maa_extra_ai_score = 60 # Equivalent to having 6 extra regiments beyond what the code scoring would indicate (see NEGATIVE_SCORE_PER_EXISTING_REGIMENT) + +# Must be synced between files with the values located at "# Provisions Costs #". +@provisions_cost_infantry_cheap = 3 +@provisions_cost_infantry_moderate = 7 +@provisions_cost_infantry_expensive = 12 +@provisions_cost_infantry_bankrupting = 15 + +@provisions_cost_cavalry_cheap = 7 +@provisions_cost_cavalry_moderate = 15 +@provisions_cost_cavalry_expensive = 21 +@provisions_cost_cavalry_bankrupting = 30 + +@provisions_cost_special_cheap = 6 +@provisions_cost_special_moderate = 12 +@provisions_cost_special_expensive = 18 +@provisions_cost_special_bankrupting = 24 + +accolade_maa_archers = { + type = archers + icon = bowmen + + can_recruit = { + any_active_accolade = { + primary_type = { + this = accolade_type:archer_attribute + } + accolade_rank >= 3 + } + } + + damage = 30 + toughness = 15 + pursuit = 0 + screen = 0 + + terrain_bonus = { + hills = { damage = 20 toughness = 8 } + forest = { toughness = 8 screen = 8 } + taiga = { toughness = 8 screen = 8 } + } + + counters = { + skirmishers = 2 + } + + buy_cost = { gold = accolade_bowmen_recruitment_cost } + low_maintenance_cost = { gold = bowmen_low_maint_cost } + high_maintenance_cost = { gold = bowmen_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + max_sub_regiments = 8 + + stack = 100 + ai_quality = { + value = culture_ai_weight_archers + add = 50 + } +} + +accolade_maa_skirmishers = { + type = skirmishers + icon = skirmishers + + can_recruit = { + any_active_accolade = { + primary_type = { + this = accolade_type:skirmisher_attribute + } + accolade_rank >= 3 + } + } + + damage = 20 + toughness = 20 + pursuit = 16 + screen = 20 + + terrain_bonus = { + forest = { damage = 8 toughness = 12 } + taiga = { damage = 8 toughness = 12 } + jungle = { damage = 8 toughness = 12 } + } + + counters = { + heavy_infantry = 2 + } + + + buy_cost = { gold = accolade_skirmisher_recruitment_cost } + low_maintenance_cost = { gold = skirmisher_low_maint_cost } + high_maintenance_cost = { gold = skirmisher_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + max_sub_regiments = 8 + + stack = 100 + ai_quality = { + value = culture_ai_weight_skirmishers + add = 50 + } +} + +accolade_maa_pikes = { + type = pikemen + icon = pikemen + + can_recruit = { + any_active_accolade = { + primary_type = { + this = accolade_type:pike_attribute + } + accolade_rank >= 3 + } + } + + damage = 30 + toughness = 30 + pursuit = 0 + screen = 0 + + terrain_bonus = { + mountains = { toughness = 24 } + desert_mountains = { toughness = 24 } + hills = { toughness = 16 } + } + + counters = { + light_cavalry = 2 + heavy_cavalry = 2 + camel_cavalry = 2 + elephant_cavalry = 2 + } + + buy_cost = { gold = accolade_pikemen_recruitment_cost } + low_maintenance_cost = { gold = pikemen_low_maint_cost } + high_maintenance_cost = { gold = pikemen_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + max_sub_regiments = 6 + + stack = 100 + ai_quality = { + value = culture_ai_weight_pikemen + add = 50 + } +} + +accolade_maa_outriders = { + type = light_cavalry + icon = light_cavalry + + can_recruit = { + any_active_accolade = { + primary_type = { + this = accolade_type:outrider_attribute + } + accolade_rank >= 3 + } + } + + damage = 30 + toughness = 20 + pursuit = 40 + screen = 40 + + terrain_bonus = { + plains = { damage = 30 } + drylands = { damage = 30 } + hills = { damage = -3 } + mountains = { damage = -5 pursuit = -10 } + desert_mountains = { damage = -8 pursuit = -10 } + wetlands = { damage = -8 toughness = -5 pursuit = -15 screen = -15 } + } + + counters = { + archers = 2 + } + + winter_bonus = { + harsh_winter = { damage = -5 toughness = -2 } + } + + buy_cost = { gold = accolade_light_cavalry_recruitment_cost } + low_maintenance_cost = { gold = light_cavalry_low_maint_cost } + high_maintenance_cost = { gold = light_cavalry_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + max_sub_regiments = 6 + + stack = 100 + ai_quality = { + value = culture_ai_weight_light_cavalry + add = 50 + } +} + +accolade_maa_vanguards = { + type = heavy_infantry + icon = heavy_infantry + + can_recruit = { + any_active_accolade = { + primary_type = { + this = accolade_type:vanguard_attribute + } + accolade_rank >= 3 + } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + damage = 45 + toughness = 35 + pursuit = 0 + screen = 0 + + counters = { + pikemen = 2 + } + + buy_cost = { gold = accolade_heavy_infantry_recruitment_cost } + low_maintenance_cost = { gold = heavy_infantry_low_maint_cost } + high_maintenance_cost = { gold = heavy_infantry_high_maint_cost } + provision_cost = @provisions_cost_infantry_expensive + + max_sub_regiments = 6 + + stack = 100 + ai_quality = { + value = culture_ai_weight_heavy_infantry + add = 75 + } +} + +accolade_maa_lancers = { + type = heavy_cavalry + icon = heavy_cavalry + + can_recruit = { + any_active_accolade = { + primary_type = { + this = accolade_type:lancer_attribute + } + accolade_rank >= 3 + } + } + + damage = 200 + toughness = 70 + pursuit = 40 + screen = 0 + + terrain_bonus = { + plains = { damage = 60 } + drylands = { damage = 60 } + hills = { damage = -10 } + mountains = { damage = -35 } + desert_mountains = { damage = -35 } + wetlands = { damage = -35 toughness = -5 pursuit = -5 } + } + + counters = { + archers = 2 + } + + winter_bonus = { + normal_winter = { damage = -10 toughness = -5 } + harsh_winter = { damage = -20 toughness = -10 } + } + + buy_cost = { gold = accolade_heavy_cavalry_recruitment_cost } + low_maintenance_cost = { gold = heavy_cavalry_low_maint_cost } + high_maintenance_cost = { gold = heavy_cavalry_high_maint_cost } + provision_cost = @provisions_cost_cavalry_expensive + + max_sub_regiments = 6 + + stack = 50 + ai_quality = { + value = culture_ai_weight_heavy_cavalry + add = 100 + } +} + +accolade_maa_crossbowers = { + type = archers + icon = crossbowmen + + can_recruit = { + any_active_accolade = { + primary_type = { + this = accolade_type:crossbowmen_attribute + } + accolade_rank >= 3 + } + } + + damage = 60 + toughness = 30 + pursuit = 0 + screen = 0 + + terrain_bonus = { + hills = { damage = 20 } + plains = { toughness = -4 } + drylands = { toughness = -4 } + desert = { toughness = -4 } + } + + counters = { + heavy_infantry = 2 + heavy_cavalry = 2 + archer_cavalry = 1 + } + + buy_cost = { gold = accolade_crossbowmen_recruitment_cost } + low_maintenance_cost = { gold = crossbowmen_low_maint_cost } + high_maintenance_cost = { gold = crossbowmen_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + max_sub_regiments = 6 + + stack = 100 + ai_quality = { + value = culture_ai_weight_archers + add = 100 + } +} + +accolade_maa_cameliers = { + type = camel_cavalry + icon = camel_riders + + can_recruit = { + any_active_accolade = { + primary_type = { + this = accolade_type:camelry_attribute + } + accolade_rank >= 3 + } + } + + damage = 30 + toughness = 20 + pursuit = 30 + screen = 30 + + terrain_bonus = { + desert = { damage = 40 toughness = 16 } + drylands = { damage = 30 toughness = 16 } + oasis = { damage = 30 } + floodplains = { damage = 10 } + hills = { damage = -5 } + desert_mountains = { damage = -5 pursuit = -5 } + mountains = { damage = -8 pursuit = -10 } + wetlands = { damage = -8 toughness = -5 pursuit = -10 screen = -10 } + } + + counters = { + light_cavalry = 2 + } + + winter_bonus = { + normal_winter = { damage = -3 } + harsh_winter = { damage = -5 toughness = -2 } + } + + buy_cost = { gold = accolade_camel_rider_recruitment_cost } + low_maintenance_cost = { gold = camel_rider_low_maint_cost } + high_maintenance_cost = { gold = camel_rider_high_maint_cost } + provision_cost = @provisions_cost_cavalry_moderate + + max_sub_regiments = 6 + + stack = 100 + ai_quality = { + value = culture_ai_weight_camels + add = 75 + } +} + +accolade_maa_elephantiers = { + type = elephant_cavalry + icon = war_elephants + + can_recruit = { + any_active_accolade = { + primary_type = { + this = accolade_type:elephantry_attribute + } + accolade_rank >= 3 + } + } + + damage = 400 + toughness = 100 + pursuit = 0 + screen = 0 + + siege_value = 0.2 + + terrain_bonus = { + jungle = { damage = 100 } + mountains = { damage = -100 } + desert_mountains = { damage = -100 } + wetlands = { damage = -150 toughness = -20 } + } + + counters = { + skirmishers = 2 + heavy_infantry = 2 + } + + winter_bonus = { + normal_winter = { damage = -30 toughness = -5 } + harsh_winter = { damage = -60 toughness = -10 } + } + + buy_cost = { gold = accolade_war_elephant_recruitment_cost } + low_maintenance_cost = { gold = war_elephant_low_maint_cost } + high_maintenance_cost = { gold = war_elephant_high_maint_cost } + provision_cost = @provisions_cost_cavalry_bankrupting + + max_sub_regiments = 4 + + stack = 25 + hired_stack_size = 10 + ai_quality = { + value = culture_ai_weight_elephants + add = 100 + } +} + +accolade_maa_horse_archers = { + type = archer_cavalry + icon = horse_archers + + can_recruit = { + any_active_accolade = { + primary_type = { + this = accolade_type:horse_archer_attribute + } + accolade_rank >= 3 + } + } + + damage = 45 + toughness = 20 + pursuit = 40 + screen = 30 + + terrain_bonus = { + steppe = { damage = 45 } + plains = { damage = 20 } + drylands = { damage = 20 } + jungle = { damage = -20 pursuit = -20 } + wetlands = { damage = -30 pursuit = -30 } + mountains = { damage = -30 pursuit = -30 } + desert_mountains = { damage = -30 pursuit = -30 } + } + + counters = { + skirmishers = 2 + heavy_infantry = 2 + } + + buy_cost = { gold = accolade_horse_archers_recruitment_cost } + low_maintenance_cost = { gold = horse_archers_low_maint_cost } + high_maintenance_cost = { gold = horse_archers_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + max_sub_regiments = 5 + + stack = 100 + ai_quality = { + value = @cultural_maa_extra_ai_score + add = 100 + } +} diff --git a/common/men_at_arms_types/01_fp1_maa_types.txt b/common/men_at_arms_types/01_fp1_maa_types.txt new file mode 100644 index 00000000..f30931b0 --- /dev/null +++ b/common/men_at_arms_types/01_fp1_maa_types.txt @@ -0,0 +1,169 @@ +# standard costs +@maa_buy_cost = 150 +@maa_low_maintenance_cost = 1.0 +@maa_high_maintenance_cost = 5.0 +@cultural_maa_extra_ai_score = 60 # Equivalent to having 6 extra regiments beyond what the code scoring would indicate (see NEGATIVE_SCORE_PER_EXISTING_REGIMENT) + +# Must be synced between files with the values located at "# Provisions Costs #". +@provisions_cost_infantry_cheap = 3 +@provisions_cost_infantry_moderate = 7 +@provisions_cost_infantry_expensive = 12 +@provisions_cost_infantry_bankrupting = 15 + +@provisions_cost_cavalry_cheap = 7 +@provisions_cost_cavalry_moderate = 15 +@provisions_cost_cavalry_expensive = 21 +@provisions_cost_cavalry_bankrupting = 30 + +@provisions_cost_special_cheap = 6 +@provisions_cost_special_moderate = 12 +@provisions_cost_special_expensive = 18 +@provisions_cost_special_bankrupting = 24 + +vigmen = { + type = archers + + damage = 18 + toughness = 20 + pursuit = 0 + screen = 22 + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_vigmen } + } + + terrain_bonus = { + farmlands = { damage = 10 toughness = 6 screen = 6 } + plains = { damage = 6 toughness = 4 screen = 4 } + taiga = { damage = 4 screen = 6 } + } + + counters = { + skirmishers = 1 + } + + winter_bonus = { + normal_winter = { toughness = 3 screen = 5 } + harsh_winter = { toughness = 3 screen = 5 } + } + + buy_cost = { gold = vigmen_recruitment_cost } + low_maintenance_cost = { gold = vigmen_low_maint_cost } + high_maintenance_cost = { gold = vigmen_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = culture_ai_weight_vigmen } + icon = vigmen +} + +bondi = { + type = pikemen + + damage = 14 + toughness = 18 + pursuit = 12 + screen = 0 + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_bondi } + } + + terrain_bonus = { + farmlands = { damage = 10 toughness = 6 pursuit = 10 } + plains = { damage = 6 toughness = 4 pursuit = 6 } + hills = { damage = -4 pursuit = -6 } + mountains = { damage = -4 pursuit = -6 } + desert_mountains = { damage = -4 pursuit = -6 } + } + + counters = { + light_cavalry = 1 + archers = 1 + } + + winter_bonus = { + normal_winter = { damage = 4 pursuit = 5 } + harsh_winter = { damage = 4 pursuit = 5 } + } + + buy_cost = { gold = bondi_recruitment_cost } + low_maintenance_cost = { gold = bondi_low_maint_cost } + high_maintenance_cost = { gold = bondi_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = bondi +} + +varangian_veterans = { + type = heavy_infantry + + damage = 45 + toughness = 30 + pursuit = 10 + screen = 0 + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_varangian_veterans } + NOT = { + culture = { has_cultural_parameter = strength_in_numbers_heavy_maa_ban } + } + } + + terrain_bonus = { + farmlands = { damage = 6 toughness = 4 } + plains = { damage = 6 toughness = 4 } + hills = { damage = 6 toughness = 4 } + } + + counters = { + pikemen = 1 + heavy_cavalry = 1 + } + + winter_bonus = { + normal_winter = { toughness = 6 screen = 6 } + harsh_winter = { toughness = 6 screen = 6 } + } + + buy_cost = { gold = varangian_veterans_recruitment_cost } + low_maintenance_cost = { gold = varangian_veterans_low_maint_cost } + high_maintenance_cost = { gold = varangian_veterans_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = varangian_veterans +} + +jomsviking_pirates = { + type = skirmishers + + can_recruit = { always = no } + + damage = 30 + toughness = 30 + pursuit = 40 + screen = 40 + + counters = { + heavy_infantry = 1 + archers = 1 + } + + winter_bonus = { + normal_winter = { damage = 8 pursuit = 8 } + harsh_winter = { damage = 8 pursuit = 8 } + } + + buy_cost = { gold = jomsviking_pirates_recruitment_cost } + low_maintenance_cost = { gold = jomsviking_pirates_low_maint_cost } + high_maintenance_cost = { gold = jomsviking_pirates_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = jomsviking_pirates +} diff --git a/common/men_at_arms_types/07_ep3_maa_types.txt b/common/men_at_arms_types/07_ep3_maa_types.txt new file mode 100644 index 00000000..81f17bd0 --- /dev/null +++ b/common/men_at_arms_types/07_ep3_maa_types.txt @@ -0,0 +1,419 @@ +# standard costs +@maa_buy_cost = 150 +@maa_low_maintenance_cost = 1.0 +@maa_high_maintenance_cost = 5.0 +@cultural_maa_extra_ai_score = 80 # Equivalent to having 8 extra regiments beyond what the code scoring would indicate (see NEGATIVE_SCORE_PER_EXISTING_REGIMENT) + +# Must be synced between files with the values located at "# Provisions Costs #". +@provisions_cost_infantry_cheap = 3 +@provisions_cost_infantry_moderate = 7 +@provisions_cost_infantry_expensive = 12 +@provisions_cost_infantry_bankrupting = 15 + +@provisions_cost_cavalry_cheap = 7 +@provisions_cost_cavalry_moderate = 15 +@provisions_cost_cavalry_expensive = 21 +@provisions_cost_cavalry_bankrupting = 30 + +@provisions_cost_special_cheap = 6 +@provisions_cost_special_moderate = 12 +@provisions_cost_special_expensive = 18 +@provisions_cost_special_bankrupting = 24 + +ayrudzi = { + type = light_cavalry + + damage = 50 + toughness = 30 + pursuit = 20 + screen = 30 + + terrain_bonus = { + hills = { damage = 30 toughness = 20 } + mountains = { damage = 20 toughness = 10 } + drylands = { damage = 10 } + plains = { damage = 10 } + wetlands = { damage = -30 toughness = -20 pursuit = -20 screen = -25 } + jungle = { damage = -30 toughness = -20 pursuit = -20 screen = -25 } + } + + counters = { + archers = 1 + archer_cavalry = 0.5 + } + + winter_bonus = { + harsh_winter = { damage = -5 } + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_ayrudzi } + } + + buy_cost = { gold = ayrudzi_recruitment_cost } + low_maintenance_cost = { gold = ayrudzi_low_maint_cost } + high_maintenance_cost = { gold = ayrudzi_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + stack = 50 + ai_quality = { + value = @cultural_maa_extra_ai_score + add = counter_synergy_ai_weight_light_cavalry + } + icon = ayrudzi +} + +conrois = { + type = heavy_cavalry + + damage = 100 + toughness = 25 + pursuit = 10 + screen = 0 + + terrain_bonus = { + plains = { damage = 30 } + drylands = { damage = 30 } + farmlands = { damage = 30 } + hills = { damage = -20 } + mountains = { damage = -75 } + desert_mountains = { damage = -75 } + wetlands = { damage = -75 toughness = -10 pursuit = -10 } + jungle = { damage = -75 toughness = -10 pursuit = -10 } + } + + counters = { + archers = 1 + light_cavalry = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_conrois } + } + + winter_bonus = { + normal_winter = { damage = -15 toughness = -5 } + harsh_winter = { damage = -25 toughness = -10 } + } + + buy_cost = { gold = conrois_recruitment_cost } + low_maintenance_cost = { gold = conrois_low_maint_cost } + high_maintenance_cost = { gold = conrois_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + stack = 50 + ai_quality = { value = @[cultural_maa_extra_ai_score + 35 ] } + icon = conrois +} + +akritai = { + type = skirmishers + + damage = 10 + toughness = 14 + pursuit = 12 + screen = 18 + + terrain_bonus = { + mountains = { damage = 10 toughness = 10 } + desert_mountains = { damage = 6 toughness = 6 } + hills = { damage = 6 toughness = 6 } + forest = { toughness = 4 } + wetlands = { toughness = 4 } + } + + counters = { + heavy_infantry = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_akritai } + } + + buy_cost = { gold = akritai_recruitment_cost } + low_maintenance_cost = { gold = akritai_low_maint_cost } + high_maintenance_cost = { gold = akritai_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { value = @[cultural_maa_extra_ai_score - 90] } + icon = akritai +} + +ballistrai = { + type = archers + + damage = 35 + toughness = 12 + pursuit = 0 + screen = 0 + + siege_value = 0.1 + + terrain_bonus = { + farmlands = { damage = 8 toughness = 6 } + plains = { damage = 8 } + hills = { damage = 8 } + } + + counters = { + pikemen = 0.5 + heavy_infantry = 0.5 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_ballistrai } + } + + buy_cost = { gold = ballistrai_recruitment_cost } + low_maintenance_cost = { gold = ballistrai_low_maint_cost } + high_maintenance_cost = { gold = ballistrai_high_maint_cost } + provision_cost = @provisions_cost_special_moderate + + stack = 50 + ai_quality = { value = @[cultural_maa_extra_ai_score + 200] } + icon = ballistrai +} + +skoutatoi = { + type = pikemen + + damage = 22 + toughness = 26 + pursuit = 0 + screen = 20 + + terrain_bonus = { + mountains = { toughness = 8 } + desert_mountains = { toughness = 8 } + hills = { toughness = 8 } + plains = { damage = 8 } + } + + counters = { + light_cavalry = 1 + heavy_cavalry = 1 + camel_cavalry = 1 + elephant_cavalry = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_skoutatoi } + } + + buy_cost = { gold = skoutatoi_recruitment_cost } + low_maintenance_cost = { gold = skoutatoi_low_maint_cost } + high_maintenance_cost = { gold = skoutatoi_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { + value = @[cultural_maa_extra_ai_score + 20] + add = counter_synergy_ai_weight_pikemen + } + icon = skoutatoi +} + +varangian_guards = { + type = heavy_infantry + + damage = 45 + toughness = 32 + pursuit = 10 + screen = 5 + + can_recruit = { + exists = scope:title + scope:title = { + has_variable = founded_varangian_guard + } + } + + terrain_bonus = { + farmlands = { damage = 12 toughness = 8 } + plains = { damage = 6 toughness = 4 } + hills = { damage = 6 toughness = 4 } + } + + counters = { + pikemen = 1 + heavy_cavalry = 1 + } + + winter_bonus = { + normal_winter = { toughness = 6 screen = 6 } + harsh_winter = { toughness = 6 screen = 6 } + } + + buy_cost = { gold = varangian_guards_recruitment_cost } + low_maintenance_cost = { gold = varangian_guards_low_maint_cost } + high_maintenance_cost = { gold = varangian_guards_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { + value = @[cultural_maa_extra_ai_score + 40] + add = counter_synergy_ai_weight_heavy_infantry + } + icon = varangian_guard +} + +handpicked_faithful = { + type = heavy_infantry + + damage = 38 + toughness = 28 + pursuit = 5 + screen = 5 + + can_recruit = { + domicile ?= { has_domicile_parameter = camp_unlocks_handpicked_faithful_maa_type } + } + + terrain_bonus = { + hills = { damage = 6 toughness = 4 } + forest = { damage = 6 toughness = 4 } + jungle = { damage = 6 toughness = 4 } + } + + counters = { + pikemen = 1 + heavy_cavalry = 1 + } + + buy_cost = { gold = handpicked_faithful_recruitment_cost } + low_maintenance_cost = { gold = handpicked_faithful_low_maint_cost } + high_maintenance_cost = { gold = handpicked_faithful_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 100 + ai_quality = { + value = @[cultural_maa_extra_ai_score + 50] + add = counter_synergy_ai_weight_heavy_infantry + } + icon = heavy_infantry +} + +maa_bandits = { + type = skirmishers + + can_recruit = { always = no } + + damage = 15 + toughness = 20 + pursuit = 20 + screen = 25 + + terrain_bonus = { + forest = { damage = 4 toughness = 6 } + hills = { damage = 4 toughness = 6 } + jungle = { damage = 4 toughness = 6 } + } + + counters = { + heavy_infantry = 1 + archers = 1 + } + + buy_cost = { gold = jomsviking_pirates_recruitment_cost } + low_maintenance_cost = { gold = jomsviking_pirates_low_maint_cost } + high_maintenance_cost = { gold = jomsviking_pirates_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 50 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = skirmishers +} + +maa_poachers = { + type = archers + + can_recruit = { always = no } + + damage = 30 + toughness = 15 + pursuit = 10 + screen = 10 + + terrain_bonus = { + hills = { damage = 10 toughness = 6 } + forest = { toughness = 10 screen = 10 } + jungle = { toughness = 10 screen = 10 } + } + + counters = { + skirmishers = 1 + } + + buy_cost = { gold = jomsviking_pirates_recruitment_cost } + low_maintenance_cost = { gold = jomsviking_pirates_low_maint_cost } + high_maintenance_cost = { gold = jomsviking_pirates_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 50 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = bowmen +} + +maa_marauders = { + type = light_cavalry + + can_recruit = { always = no } + + damage = 30 + toughness = 15 + pursuit = 40 + screen = 30 + + terrain_bonus = { + plains = { damage = 15 } + drylands = { damage = 15 } + farmlands = { damage = 25 } + } + + counters = { + archers = 1 + } + + buy_cost = { gold = jomsviking_pirates_recruitment_cost } + low_maintenance_cost = { gold = jomsviking_pirates_low_maint_cost } + high_maintenance_cost = { gold = jomsviking_pirates_high_maint_cost } + provision_cost = @provisions_cost_infantry_moderate + + stack = 50 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = light_cavalry +} + +maa_thieves = { + type = pikemen + + can_recruit = { always = no } + + damage = 30 + toughness = 20 + pursuit = 10 + screen = 10 + + terrain_bonus = { + mountains = { toughness = 15 } + desert_mountains = { toughness = 15 } + hills = { toughness = 10 } + } + + counters = { + light_cavalry = 1 + heavy_cavalry = 1 + camel_cavalry = 1 + elephant_cavalry = 1 + } + + buy_cost = { gold = jomsviking_pirates_recruitment_cost } + low_maintenance_cost = { gold = jomsviking_pirates_low_maint_cost } + high_maintenance_cost = { gold = jomsviking_pirates_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 50 + ai_quality = { value = @cultural_maa_extra_ai_score } + icon = pikemen +} diff --git a/common/men_at_arms_types/09_mpo_maa_types.txt b/common/men_at_arms_types/09_mpo_maa_types.txt new file mode 100644 index 00000000..8fd0b65b --- /dev/null +++ b/common/men_at_arms_types/09_mpo_maa_types.txt @@ -0,0 +1,397 @@ +# standard costs +@maa_buy_cost = 150 +@maa_low_maintenance_cost = 1.0 +@maa_high_maintenance_cost = 5.0 +@cultural_maa_extra_ai_score = 80 # Equivalent to having 8 extra regiments beyond what the code scoring would indicate (see NEGATIVE_SCORE_PER_EXISTING_REGIMENT) + +# Must be synced between files with the values located at "# Provisions Costs #". +@provisions_cost_infantry_cheap = 3 +@provisions_cost_infantry_moderate = 7 +@provisions_cost_infantry_expensive = 12 +@provisions_cost_infantry_bankrupting = 15 + +@provisions_cost_cavalry_cheap = 7 +@provisions_cost_cavalry_moderate = 15 +@provisions_cost_cavalry_expensive = 21 +@provisions_cost_cavalry_bankrupting = 30 + +@provisions_cost_special_cheap = 6 +@provisions_cost_special_moderate = 12 +@provisions_cost_special_expensive = 18 +@provisions_cost_special_bankrupting = 24 + +nomadic_riders = { + type = nomadic_horde + + damage = 12 + toughness = 12 + pursuit = 10 + screen = 15 + + terrain_bonus = { + steppe = { damage = 8 pursuit = 10 } + plains = { damage = 4 pursuit = 6 } + drylands = { damage = 4 pursuit = 6 } + } + + # No cost as this is the basic type of MAA given by converting your Herd + provision_cost = @provisions_cost_cavalry_cheap + + can_recruit = { + # Prevents this MaA type from being shown in the interface + # Nomadic Riders are always created and raised from code + always = no + } + + stack = 100 + # No AI for the same reason as above + icon = nomadic_riders +} + +torch_bearers = { + type = siege_weapon + fights_in_main_phase = no + + damage = 20 + toughness = 12 + + siege_tier = 1 + siege_value = 0.1 + + can_recruit = { + government_has_flag = government_is_nomadic + } + + holding_bonus = { + nomad_holding = { + siege_value = 0.3 + } + tribal_holding = { + siege_value = 0.1 + } + } + + buy_cost = { gold = torch_bearers_recruitment_cost } + low_maintenance_cost = { gold = torch_bearers_low_maint_cost } + high_maintenance_cost = { gold = torch_bearers_high_maint_cost } + provision_cost = @provisions_cost_special_cheap + + stack = 10 + allowed_in_hired_troops = no + icon = torch_bearers +} + +kheshig = { + type = archer_cavalry + + damage = 94 + toughness = 60 + pursuit = 24 + screen = 36 + + terrain_bonus = { + steppe = { damage = 90 screen = 20 } + plains = { damage = 50 screen = 10 } + drylands = { damage = 20 } + jungle = { damage = -40 pursuit = -20 } + wetlands = { damage = -70 pursuit = -40 } + mountains = { damage = -70 pursuit = -40 } + desert_mountains = { damage = -70 pursuit = -40 } + } + + can_recruit = { + dynasty ?= { has_dynasty_perk = mpo_nomad_legacy_3 } + } + + counters = { + light_cavalry = 1 + heavy_cavalry = 0.5 + elephant_cavalry = 1 + } + + max_regiments = 1 + + buy_cost = { gold = kheshig_recruitment_cost } + low_maintenance_cost = { gold = kheshig_veterans_low_maint_cost } + high_maintenance_cost = { gold = kheshig_veterans_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + stack = 50 + ai_quality = { value = 100 } + icon = keshig +} + +steppe_raiders = { + type = light_cavalry + + damage = 22 + toughness = 15 + pursuit = 30 + screen = 30 + + terrain_bonus = { + steppe = { damage = 15 } + plains = { damage = 15 } + drylands = { damage = 15 } + desert = { damage = 10 } + forest = { damage = 5 } + taiga = { damage = 5 } + mountains = { damage = -5 pursuit = -10 } + desert_mountains = { damage = -5 pursuit = -10 } + wetlands = { damage = -10 toughness = -5 pursuit = -15 screen = -15 } + } + + counters = { + archers = 1 + } + + can_recruit = { + mpo_can_recruit_nomad_maa_trigger = yes + } + + buy_cost = { gold = steppe_raiders_recruitment_cost } + low_maintenance_cost = { gold = steppe_raiders_low_maint_cost } + high_maintenance_cost = { gold = steppe_raiders_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + holy_order_fallback = yes + + stack = 100 + ai_quality = { + value = culture_ai_weight_light_cavalry + add = counter_synergy_ai_weight_light_cavalry + add = -20 + } + icon = steppe_raiders +} + +heavy_horse_archers = { + type = archer_cavalry + + damage = 92 + toughness = 42 + pursuit = 24 + screen = 24 + + terrain_bonus = { + steppe = { damage = 80 } + plains = { damage = 40 } + forest = { damage = -20 pursuit = -10 } + taiga = { damage = -20 pursuit = -10 } + jungle = { damage = -50 pursuit = -25 } + wetlands = { damage = -85 pursuit = -40 } + mountains = { damage = -85 pursuit = -40 } + desert_mountains = { damage = -85 pursuit = -40 } + } + + can_recruit = { + mpo_can_recruit_nomad_maa_trigger = yes + trigger_if = { + limit = { + government_has_flag = government_is_nomadic + exists = domicile + } + domicile = { + has_domicile_parameter = unlock_maa_heavy_horse_archers + } + } + } + + counters = { + light_cavalry = 1 + elephant_cavalry = 1 + } + + winter_bonus = { + normal_winter = { damage = -10 toughness = -5 } + harsh_winter = { damage = -20 toughness = -10 } + } + + buy_cost = { gold = heavy_horse_archers_recruitment_cost } + low_maintenance_cost = { gold = heavy_horse_archers_low_maint_cost } + high_maintenance_cost = { gold = heavy_horse_archers_high_maint_cost } + provision_cost = @provisions_cost_cavalry_expensive + + stack = 50 + ai_quality = { + value = @cultural_maa_extra_ai_score + add = 100 #I mean... they're horse archers + } + icon = heavy_horse_archers +} + +nomad_lancers = { + type = heavy_cavalry + + damage = 120 + toughness = 30 + pursuit = 20 + screen = 0 + + terrain_bonus = { + steppe = { damage = 50 } + plains = { damage = 40 } + drylands = { damage = 10 } + hills = { damage = -20 } + mountains = { damage = -75 } + desert_mountains = { damage = -75 } + wetlands = { damage = -75 toughness = -10 pursuit = -10 } + } + + can_recruit = { + mpo_can_recruit_nomad_heavy_cavalry_maa_trigger = yes + } + + counters = { + archers = 0.5 + } + + winter_bonus = { + normal_winter = { damage = -10 toughness = -5 } + harsh_winter = { damage = -20 toughness = -10 } + } + + buy_cost = { gold = nomad_lancers_recruitment_cost } + low_maintenance_cost = { gold = nomad_lancers_low_maint_cost } + high_maintenance_cost = { gold = nomad_lancers_high_maint_cost } + provision_cost = @provisions_cost_cavalry_expensive + + stack = 50 + ai_quality = { + value = culture_ai_weight_heavy_cavalry + add = 100 + } + icon = nomad_lancers +} + +mangudai = { + type = archer_cavalry + + damage = 50 + toughness = 6 + pursuit = 60 + screen = 10 + + terrain_bonus = { + steppe = { damage = 45 } + plains = { damage = 20 } + hills = { damage = 10 } + mountains = { damage = -10 pursuit = -10 } + jungle = { damage = -20 pursuit = -20 } + wetlands = { damage = -30 pursuit = -30 } + desert_mountains = { damage = -30 pursuit = -30 } + } + + counters = { + pikemen = 0.5 + heavy_infantry = 1 + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_mangudai } + } + + buy_cost = { gold = mangudai_recruitment_cost } + low_maintenance_cost = { gold = mangudai_low_maint_cost } + high_maintenance_cost = { gold = mangudai_high_maint_cost } + provision_cost = @provisions_cost_cavalry_cheap + + stack = 100 + ai_quality = { + value = @cultural_maa_extra_ai_score + } + icon = mangudai +} + +cataphract_archers = { + type = heavy_cavalry + + damage = 90 + toughness = 52 + pursuit = 20 + screen = 10 + + terrain_bonus = { + steppe = { damage = 40 } + drylands = { damage = 40 } + plains = { damage = 40 } + hills = { damage = -20 } + desert_mountains = { damage = -50 } + mountains = { damage = -75 } + wetlands = { damage = -75 toughness = -10 pursuit = -10 } + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_cataphract_archers } + #Either non-nomadic or has some dominance + OR = { + NOT = { + government_has_flag = government_is_nomadic + } + has_realm_law_flag = unlock_maa_nomad_lancers + } + } + + counters = { + archer_cavalry = 1 + archers = 1 + } + + winter_bonus = { + normal_winter = { damage = -10 toughness = -5 } + harsh_winter = { damage = -20 toughness = -10 } + } + + buy_cost = { gold = cataphract_archers_recruitment_cost } + low_maintenance_cost = { gold = cataphract_archers_low_maint_cost } + high_maintenance_cost = { gold = cataphract_archers_high_maint_cost } + provision_cost = @provisions_cost_cavalry_expensive + + stack = 50 + ai_quality = { + value = @cultural_maa_extra_ai_score + add = 200 + } + icon = cataphract_archers +} + +maturkan_warriors = { + type = archers + + damage = 16 + toughness = 15 + pursuit = 0 + screen = 16 + + terrain_bonus = { + taiga = { damage = 12 toughness = 6 } + forest = { damage = 10 toughness = 4 } + hills = { damage = 6 toughness = 3 } + mountains = { damage = 6 toughness = 3 } + } + + counters = { + skirmishers = 1 + } + + winter_bonus = { + harsh_winter = { toughness = 6 screen = 12 } + normal_winter = { toughness = 4 screen = 8 } + } + + can_recruit = { + valid_for_maa_trigger = { PARAMETER = unlock_maa_maturkan_warriors } + } + + buy_cost = { gold = maturkan_warriors_recruitment_cost } + low_maintenance_cost = { gold = maturkan_warriors_low_maint_cost } + high_maintenance_cost = { gold = maturkan_warriors_high_maint_cost } + provision_cost = @provisions_cost_infantry_cheap + + stack = 100 + ai_quality = { + value = @cultural_maa_extra_ai_score + add = counter_synergy_ai_weight_archers + } + icon = maturkan_warriors +} diff --git a/common/men_at_arms_types/_men_at_arms_types.info b/common/men_at_arms_types/_men_at_arms_types.info new file mode 100644 index 00000000..c4303ce9 --- /dev/null +++ b/common/men_at_arms_types/_men_at_arms_types.info @@ -0,0 +1,57 @@ +key = { + type = type_name + + icon = name # Optional, use this name instead of the key when selecting icon graphics + + can_recruit = {} # Trigger in character scope for whether you can recruit it. Optional. Mutually exclusive with being unlocked by innovation + # Has scope:title set when trying to recruit title MaA + + pursuit = 10 # Damage dealt in pursuit phase if on winning side + screen = 10 # Damage mitigated in pursuit phase if on losing side + damage = 50 # Damage dealt + toughness = 40 # Ability to absorb damage + siege_value = 0.1 # How much it contributes to sieges + max = 3 # Overrides base MaA size limit. Is added with any other MaA size bonuses + + fights_in_main_phase = no # If set, only affects the pursuit phase. Handy for siege weapons + siege_tier = 1 # How good it is at countering forts + + buy_cost = { gold = 0 prestige = 0 piety = 0 } # Costs. Support gold, prestige, and piety + low_maintenance_cost = { gold = 2 } # Maintenance paid when the regiment is unraised and fully reinforced or when reinforcement is disabled + high_maintenance_cost = { gold = 10 } # Maintenance paid when the regiment is raised or not fully reinforced + + # Terrain bonuses pursuit, siege_value, etc. + terrain_bonus = { + plains = { damage = 10 } + } + + # What archetypes it counters, and how much. The number is how many subregiments it counters + counters = { + pikemen = 1 + archers = 1 + } + + stack = 100 # Size of one sub-regiment + hired_stack_size = 25 # size of sub-regiment for the purpose of hired troops. If not set, this will be the same as the "stack" value + + ai_quality = { ... } # Script value in character scope. Used in addition to a quality calculation (based on TOUGHNESS_SCORE_MULT, etc.) to figure out what the AI should buy/disband + + fallback_in_hired_troops_if_unlocked = yes # Mercs/holy orders won't have a preference towards this MaA if it is unlocked + mercenary_fallback = no # Mercenary will have a lower priority to use this type + holy_order_fallback = no # Holy order will have a lower priority to use this type + allowed_in_hired_troops = yes # MaA type can be used in hired troops + max_sub_regiments = -1 # If positive, only one reginemt of this type can be created, and have this maximum size. Unaffected by bonuses to MaA regiment size + + provision_cost = 0 # The amount of provison cost for this MAA type when moving your domicile +} + +== Base type modifiers == +All get prefixed with the base type. E.G., "max_size_add" will become type_key_max_size_add. +max_size_add/mult +siege_value_add/mult +damage_add/mult +toughness_add/mult +pursuit_add/mult +screen_add/mult +maintenance_mult +recruitment_cost_mult diff --git a/common/on_action/game_start.txt b/common/on_action/game_start.txt index 59a453a6..65c5eb07 100644 --- a/common/on_action/game_start.txt +++ b/common/on_action/game_start.txt @@ -23,13 +23,22 @@ on_game_start = { } } ##NEOW End - #Epidemics 3 months grace set_global_variable = { name = start_epidemic_grace value = yes months = 3 } + #Set Cumania name if there is no MPO DLC + if = { + limit = { + has_mpo_dlc_trigger = no + current_date >= 1000.1.1 + } + title:e_caspian-pontic_steppe = { + set_title_name = cn_cumania + } + } #Rabbene Gershom outlaws polygamy if = { limit = { @@ -125,7 +134,7 @@ on_game_start = { limit = { cid_story_cycle_start_trigger = yes } - trigger_event = { + trigger_event = { id = cid.0001 days = 1 } @@ -204,7 +213,7 @@ on_game_start = { faith = faith:armenian_apostolic } vassal_contract_set_obligation_level = { type = religious_rights level = 1 } - set_vassal_contract_modification_blocked = no + set_subject_contract_modification_blocked = no } } title:e_arabia.holder ?= { @@ -217,10 +226,44 @@ on_game_start = { vassal_contract_set_obligation_level = { type = feudal_government_taxes level = 3 } vassal_contract_set_obligation_level = { type = feudal_government_levies level = 2 } vassal_contract_set_obligation_level = { type = jizya_special_rights level = 1 } - set_vassal_contract_modification_blocked = no + set_subject_contract_modification_blocked = no } } + ### Every nomad and herder in the Steppe Region becomes tribal if DLC not enabled, pre-lobby history setup ### + if = { + limit = { + has_mpo_dlc_trigger = no + } + # Change Nomad and Herder Holdings to Tribal Holdings for Tribals + every_province = { + limit = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + set_holding_type = tribal_holding + if = { + limit = { + county.holder.capital_province ?= this + } + county.holder ?= { + if = { + limit = { + NOT = { + has_government = tribal_government + } + } + change_government = tribal_government + } + } + } + } + } + + setup_tributaries_effect = yes # defined in 00_tributary_setup_effect.txt + ### RELIGIOUS THINGS ### # Set up Holy Site Buildings to be buildable in Holy Sites religion:islam_religion = { @@ -359,15 +402,15 @@ on_game_start = { game_start_date >= 1178.10.1 } religion:islam_religion = { - set_variable = { - name = variable_ghw_unlocked - value = yes + set_variable = { + name = variable_ghw_unlocked + value = yes } } religion:christianity_religion = { - set_variable = { - name = variable_ghw_unlocked - value = yes + set_variable = { + name = variable_ghw_unlocked + value = yes } } set_global_variable = { @@ -400,19 +443,19 @@ on_game_start = { game_start_date >= 1178.10.1 } character:231000 = { - save_scope_as = leader + save_scope_as = leader_1 } character:223523 = { - save_scope_as = founder + save_scope_as = founder_1 } title:b_hebron = { - save_scope_as = barony + save_scope_as = barony_1 } create_holy_order_neutral_effect = { - LEADER = scope:leader - CAPITAL = scope:barony + LEADER = scope:leader_1 + CAPITAL = scope:barony_1 NEW_HO_SCOPE = new_holy_order - FOUNDER = scope:founder + FOUNDER = scope:founder_1 } } @@ -438,17 +481,59 @@ on_game_start = { title:b_wazwan.title_province = { add_special_building_slot = generic_university } # Technically should be Isfahan, but that's occupied by the Friday Mosque title:b_sarsar.title_province = { add_special_building_slot = generic_university } # Technically should be Baghdad, but that's occupied by the House of Wisdom title:b_speyer.title_province = { add_special_building_slot = generic_university } # 1350ish, should be in Heidelberg but that's a church - title:b_krakow.title_province = { add_special_building_slot = generic_university } # 1350ish + title:b_krakow.title_province = { add_special_building_slot = generic_university } # 1364 title:b_pisa.title_province = { add_special_building_slot = generic_university } # 1350ish title:b_rostock.title_province = { add_special_building_slot = generic_university } # 1400ish title:b_turin.title_province = { add_special_building_slot = generic_university } # 1400ish title:b_ferrara.title_province = { add_special_building_slot = generic_university } # 1400ish title:b_leipzig.title_province = { add_special_building_slot = generic_university } # 1400ish, a city holding title:b_messina.title_province = { add_special_building_slot = generic_university } # 1400ish, should be in Catania but that's a church - title:b_barcelona.title_province = { add_special_building_slot = generic_university } # 1450ish, but still fun to build + if = { + limit = { + has_cp3_dlc_trigger = yes + } + title:b_sitges.title_province = { add_special_building_slot = generic_university } # Should be Barcelona but that location has another building now + } + else = { + title:b_barcelona.title_province = { add_special_building_slot = generic_university } # 1450ish, but still fun to build + } title:b_dumbarton.title_province = { add_special_building_slot = generic_university } # 1450ish, but still fun to build title:b_bidar.title_province = { add_special_building_slot = generic_university } # 1450ish, but still fun to build + if = { + limit = { + has_cp3_dlc_trigger = yes + } + title:b_barcelona.title_province = { add_special_building_slot = drassanes_01 } #1892 + title:b_merv.title_province = { add_special_building = kyz_kala_01 } #4238 + if = { limit = { game_start_date >= 1178.10.1 } title:b_cluny.title_province = { add_special_building = cluny_abbey_02 } } #2304 + else_if = { limit = { game_start_date >= 1066.9.15 } title:b_cluny.title_province = { add_special_building = cluny_abbey_01 } } + else = { title:b_cluny.title_province = { add_special_building_slot = cluny_abbey_01 } } + title:b_york.title_province = { add_special_building = york_walls_01 } #1595 + title:b_damascus.title_province = { add_special_building = damascus_mosque_01 } #5924 + title:b_lhasa.title_province = { add_special_building = jokhang_01 } #9237 + if = { limit = { game_start_date >= 1178.10.1 } title:b_schmalkalden.title_province = { add_special_building = wartburg_01 } } #3010 + else = { title:b_schmalkalden.title_province = { add_special_building_slot = wartburg_01 } } + title:b_lalibela.title_province = { add_special_building_slot = beta_giyorgis_01 } #8301 + if = { limit = { game_start_date >= 1066.9.15 } title:b_novgorod.title_province = { add_special_building = holy_wisdom_01 } } #5137 + else = { title:b_novgorod.title_province = { add_special_building_slot = holy_wisdom_01 } } + title:b_kano.title_province = { add_special_building_slot = kano_walls_01 } #6519 + #NOTE: b_somapur already has a special building + title:b_somapur.title_province = { remove_building = generic_university add_special_building = somapura_university_01 } #848 + if = { limit = { game_start_date >= 1178.10.1 } title:b_firenze.title_province = { add_special_building = duomo_florence_02 } } #2543 + else = { title:b_firenze.title_province = { add_special_building = duomo_florence_01 } } + title:b_konarak.title_province = { add_special_building_slot = konark_temple_01 } #928 + title:b_fes.title_province = { add_special_building = al_qarawiyyin_university_01 } #4694 + title:b_kairouan.title_province = { add_special_building = kairouan_basins_01 } #4594 + title:b_al-ghaba.title_province = { add_special_building = ghana_palace_01 } #6628 #NOTE: likely existed since the 8th, but earliest (only) source on palace is from 1068 + title:b_visegrad_hun.title_province = { add_special_building_slot = visegrad_castle_01 } #3803 + if = { limit = { game_start_date >= 1161.9.15 } title:b_leczyca.title_province = { add_special_building = wawel_cathedral_01 } } #4924 #Date of consecreation of Archcollegiate Church of St. Mary and St. Alexius in Tum + else = { title:b_leczyca.title_province = { add_special_building_slot = wawel_cathedral_01 } } + title:b_vatapi.title_province = { add_special_building = vatapi_caves_01 } #1198 + if = { limit = { game_start_date >= 1178.10.1 } title:b_jaisalmer.title_province = { add_special_building = jaisalmer_fort_01 } } #3387 + else = { title:b_jaisalmer.title_province = { add_special_building_slot = jaisalmer_fort_01 } } #3387 + } + ### COA ### if = { limit = { @@ -654,7 +739,7 @@ on_game_start = { character:3040 = { designate_diarch = character:3050 # This is a vizierate as well, so start the diarchy manually. - start_diarchy = vizierate + try_start_diarchy = vizierate # Tell Alp that he appointed Hassan so he remembers not to dismiss him. set_variable = { name = my_vizier @@ -665,7 +750,7 @@ on_game_start = { character:1732 = { if = { limit = { has_ep3_dlc_trigger = yes } - start_diarchy = co_emperorship + try_start_diarchy = co_emperorship set_diarch = character:1736 set_designated_heir = character:1736 } @@ -728,7 +813,7 @@ on_game_start = { character:215530 = { if = { limit = { has_ep3_dlc_trigger = yes } - start_diarchy = junior_emperorship + try_start_diarchy = junior_emperorship set_diarch = character:215531 set_designated_heir = character:215531 } @@ -736,13 +821,18 @@ on_game_start = { ## Henry II of England and the Young King character:204500 = { designate_diarch = character:204508 - start_diarchy = co_monarchy + try_start_diarchy = co_monarchy set_designated_heir = character:204508 } ## Teresa of Portugal for Afonso the Conqueror - character:209503 = { - start_diarchy = regency - set_diarch = character:209510 + character:209503 = { + try_start_diarchy = regency + set_diarch = character:209510 + } + ## Kara Khitai, Wolila for Zhilugu + character:188912 = { + try_start_diarchy = nomad_regency + set_diarch = character:188909 } # Plus remove all the generated opinions. ## Richard I and Eleanor of Aquitaine @@ -770,31 +860,56 @@ on_game_start = { NEW_DIARCH = character:209510 LIEGE = character:209503 } + ## Wolila and Zhilugu + remove_generated_diarch_consequences_effect = { + NEW_DIARCH = character:188909 + LIEGE = character:188912 + } + } # Set up anyone who should be in a regency at start whether we have sources or not. ## If you start as a child, incapable, or imprisoned, you get a regency. every_ruler = { - limit = { - OR = { - is_adult = no - is_incapable = yes - is_imprisoned = yes - } - } - # We don't want to check over so many characters *twice*, so we check again inside the block to determine what type of regency to put 'em in. - ## Temporary Regencies. if = { - limit = { is_imprisoned = yes } - trigger_event = { - id = diarchy.0001 - delayed = yes + limit = { + OR = { + is_adult = no + is_incapable = yes + is_imprisoned = yes + } + } + # We don't want to check over so many characters *twice*, so we check again inside the block to determine what type of regency to put 'em in. + ## Temporary Regencies. + if = { + limit = { is_imprisoned = yes } + trigger_event = { + id = diarchy.0001 + delayed = yes + } + } + ## Entrenched Regencies. + else = { + trigger_event = { + id = diarchy.0011 + delayed = yes + } } } - ## Entrenched Regencies. - else = { - trigger_event = { - id = diarchy.0011 - delayed = yes + if = { + limit = { + has_mpo_dlc_trigger = no + } + if = { + limit = { + has_government = nomad_government + } + change_government = tribal_government + } + else_if = { + limit = { + has_government = herder_government + } + change_government = tribal_government } } } @@ -804,6 +919,10 @@ on_game_start = { limit = { exists = character:3096 } character:3096 = { trigger_event = diarchy.0012 } } + else_if = { + limit = { exists = character:188912 } + character:188912 = { trigger_event = diarchy.0012 } + } ### FERTILE LANDS ### # For deserts that are supposed to be very fertile @@ -868,6 +987,78 @@ on_game_start = { title:e_byzantium = { set_variable = founded_varangian_guard } } + if = { + limit = { + has_dlc_feature = hybridize_culture + NOT = { + has_dlc_feature = khans_of_the_steppe + } + } + culture:mongol = { + add_culture_tradition = tradition_malleable_invaders + } + culture:khitan = { + add_culture_tradition = tradition_malleable_invaders + } + culture:jurchen = { + add_culture_tradition = tradition_malleable_invaders + } + culture:cuman = { + add_culture_tradition = tradition_malleable_invaders + } + culture:bolghar = { + add_culture_tradition = tradition_malleable_invaders + } + culture:bashkir = { + add_culture_tradition = tradition_malleable_invaders + } + culture:karluk = { + add_culture_tradition = tradition_malleable_invaders + } + culture:shatuo = { + add_culture_tradition = tradition_malleable_invaders + } + } + + if = { + limit = { + NOT = { + has_dlc_feature = khans_of_the_steppe + } + } + culture:hunnic = { add_culture_tradition = tradition_horse_lords add_culture_tradition = tradition_steppe_tolerance } + culture:saka = { add_culture_tradition = tradition_horse_lords } + culture:alan = { add_culture_tradition = tradition_horse_lords add_culture_tradition = tradition_steppe_tolerance } + culture:mongol = { add_culture_tradition = tradition_horse_lords add_culture_tradition = tradition_steppe_tolerance } + culture:buryat = { add_culture_tradition = tradition_horse_lords add_culture_tradition = tradition_steppe_tolerance } + culture:oirat = { add_culture_tradition = tradition_horse_lords } + culture:naiman = { add_culture_tradition = tradition_horse_lords add_culture_tradition = tradition_steppe_tolerance } + culture:kerait = { add_culture_tradition = tradition_horse_lords add_culture_tradition = tradition_steppe_tolerance } + culture:khitan = { add_culture_tradition = tradition_horse_lords } + culture:tuyuhun = { add_culture_tradition = tradition_horse_lords } + culture:jurchen = { add_culture_tradition = tradition_horse_lords } + culture:cuman = { add_culture_tradition = tradition_horse_lords } + culture:khazar = { add_culture_tradition = tradition_horse_lords add_culture_tradition = tradition_steppe_tolerance } + culture:bolghar = { add_culture_tradition = tradition_horse_lords } + culture:bashkir = { add_culture_tradition = tradition_horse_lords } + culture:avar = { add_culture_tradition = tradition_horse_lords } + culture:karluk = { add_culture_tradition = tradition_horse_lords add_culture_tradition = tradition_steppe_tolerance } + culture:kimek = { add_culture_tradition = tradition_horse_lords } + culture:kipchak = { add_culture_tradition = tradition_horse_lords } + culture:laktan = { add_culture_tradition = tradition_horse_lords } + culture:kirghiz = { add_culture_tradition = tradition_horse_lords } + culture:yughur = { add_culture_tradition = tradition_horse_lords add_culture_tradition = tradition_steppe_tolerance } + culture:uriankhai = { add_culture_tradition = tradition_horse_lords } + culture:chuvash = { add_culture_tradition = tradition_horse_lords } + culture:ongud = { add_culture_tradition = tradition_horse_lords } + culture:turkmen = { add_culture_tradition = tradition_horse_lords } + culture:mogyer = { add_culture_tradition = tradition_horse_lords } + culture:pecheneg = { add_culture_tradition = tradition_horse_lords } + culture:ongud = { add_culture_tradition = tradition_steppe_tolerance } + culture:uyghur = { add_culture_tradition = tradition_steppe_tolerance } + #culture:turkish = { add_culture_tradition = tradition_horse_lords } + } + ### DEBUG GLOBAL VARIABLES ### # We set these here so that they present nicely and you can see when some variables register zero. @@ -1184,7 +1375,7 @@ on_game_start = { add_legitimacy = major_legitimacy_gain } } - + # Cultural setup if = { limit = { @@ -1389,6 +1580,29 @@ on_game_start = { } } } + + # MPO Tribes of the North cultrad mechanic + if = { + limit = { + has_dlc_feature = khans_of_the_steppe + } + every_county_in_region = { + region = mpo_region_permafrost + if = { + limit = { + holder.culture ?= culture + culture = { + has_cultural_parameter = permafrost_modifier_mechanic + } + } + add_county_modifier = mpo_siberian_permafrost_modifier + } + else = { + add_county_modifier = mpo_siberian_permafrost_modifier_bad + } + + } + } # Byzantine name game rule title:e_byzantium = { @@ -1429,10 +1643,10 @@ on_game_start = { set_title_name = e_unholy_roman_empire } } - + # Admin - Let's give existing governors the Governor trait on game start every_independent_ruler = { - limit = { has_government = administrative_government } + limit = { government_has_flag = government_is_administrative } every_vassal = { limit = { is_governor = yes @@ -1448,68 +1662,774 @@ on_game_start = { } } } + if = { + limit = { + title:k_magyar = { + exists = holder + } + } + title:k_magyar = { + add_title_law = confederation_elective_succession_law + } + } } } # Like on_game_start, except it is called once the host (or player, in single player) exits the lobby. Good for anything where you need to know who the players are, or what the game rules are on_game_start_after_lobby = { effect = { - # Make sure that Realm Priests are landed theocrats where it makes sense - every_ruler = { - limit = { - highest_held_title_tier >= tier_duchy - } - if = { - limit = { - exists = cp:councillor_court_chaplain - cp:councillor_court_chaplain = { - is_ruler = no - } - faith = { has_doctrine = doctrine_clerical_succession_spiritual_fixed_appointment } - any_vassal = { - is_physically_able_adult = yes - is_councillor = no - government_has_flag = government_is_theocracy - can_be_court_chaplain_trigger = { COURT_OWNER = liege } - faith = liege.faith + # To prevent the Season Changes event from triggering on game start + situation:the_great_steppe ?= { + every_participant_group = { + every_situation_group_participant = { + set_variable = { + name = steppe_game_start_var + years = 1 } } - random_vassal = { + } + } + + # Extra Nomad Regions + #Tibet + if = { + limit = { + has_mpo_dlc_trigger = yes + has_game_rule = tibet_nomad_region_on + } + start_situation = { + type = game_rule_extra_nomads_tibet + start_phase = situation_steppe_abundant_grazing_season + save_scope_as = my_situation + } + scope:my_situation = { + every_situation_county = { limit = { - is_physically_able_adult = yes - is_councillor = no - government_has_flag = government_is_theocracy - can_be_court_chaplain_trigger = { COURT_OWNER = liege } - faith = liege.faith - } - weight = { - base = 1 - modifier = { - add = 1000 - faith.religious_head ?= this - } - modifier = { - add = learning - } - modifier = { - add = primary_title.tier + holder = { + government_has_flag = government_is_tribal } } - liege = { - assign_councillor_type = { - type = councillor_court_chaplain - remove_existing_councillor = yes - target = prev + holder = { + set_variable = { + name = steppe_game_start_var + years = 1 + } + every_held_title = { + if = { + limit = { + title_province = { + has_holding_type = tribal_holding + } + } + title_province = { + set_holding_type = nomad_holding + } + } + } + change_government = nomad_government + if = { + limit = { + OR = { + domicile.domicile_culture != capital_county.culture + domicile.domicile_faith != capital_county.faith + } + } + domicile = { + set_domicile_culture = prev.capital_county.culture + set_domicile_faith = prev.capital_county.faith + } } } } } + title:k_xia ?= { + every_in_de_jure_hierarchy = { + limit = { + holder ?= { + government_has_flag = government_is_tribal + } + } + holder = { + set_variable = { + name = steppe_game_start_var + years = 1 + } + every_held_title = { + if = { + limit = { + title_province = { + has_holding_type = tribal_holding + } + } + title_province = { + set_holding_type = nomad_holding + } + } + } + change_government = nomad_government + } + } + } + } + #Sami + if = { + limit = { + has_mpo_dlc_trigger = yes + has_game_rule = sami_nomad_region_on + } + start_situation = { + type = game_rule_extra_nomads_sami + start_phase = situation_steppe_abundant_grazing_season + save_scope_as = my_situation + } + scope:my_situation = { + every_situation_county = { + limit = { + holder = { + OR = { + culture = culture:sami + culture = culture:karelian + culture = culture:samoyed + is_ai = no + } + } + } + holder = { + set_variable = { + name = steppe_game_start_var + years = 1 + } + every_held_title = { + if = { + limit = { + title_province = { + has_holding_type = tribal_holding + } + } + title_province = { + set_holding_type = nomad_holding + } + } + } + change_government = nomad_government + } + } + } + } + #Arabia + if = { + limit = { + has_mpo_dlc_trigger = yes + has_game_rule = arabia_nomad_region_on + } + start_situation = { + type = game_rule_extra_nomads_arabs + start_phase = situation_steppe_severe_drought_season + save_scope_as = my_situation + sub_region = { + key = arabia_nomads + start_phase = situation_steppe_severe_drought_season + map_color = { 34 255 76 } + geographical_regions = { arab_nomad_area } + } + sub_region = { + key = egypt_nomads + start_phase = situation_steppe_abundant_grazing_season + map_color = { 24 155 76 } + geographical_regions = { egypt_nomad_area } + } + } + scope:my_situation = { + every_situation_county = { + limit = { + holder = { + government_has_flag = government_is_tribal + } + } + holder = { + set_variable = { + name = steppe_game_start_var + years = 1 + } + every_held_title = { + if = { + limit = { + title_province = { + has_holding_type = tribal_holding + } + } + title_province = { + set_holding_type = nomad_holding + } + } + } + change_government = nomad_government + } + } + } + } + #Sahel + if = { + limit = { + has_mpo_dlc_trigger = yes + has_game_rule = sahel_nomad_region_on + } + start_situation = { + type = game_rule_extra_nomads_sahel + start_phase = situation_steppe_severe_drought_season + save_scope_as = my_situation + sub_region = { + key = north_africa_nomads + start_phase = situation_steppe_abundant_grazing_season + map_color = { 155 62 0 } + geographical_regions = { sahel_north_africa_nomad_area } + } + sub_region = { + key = sahara_nomads + start_phase = situation_steppe_severe_drought_season + map_color = { 255 232 100 } + geographical_regions = { sahel_desert_nomad_area } + } + sub_region = { + key = sahel_nomads + start_phase = situation_steppe_abundant_grazing_season + map_color = { 100 46 92 } + geographical_regions = { sahel_sub_saharan_africa_nomad_area } + } + } + scope:my_situation = { + every_situation_county = { + limit = { + holder = { + government_has_flag = government_is_tribal + OR = { + culture = { has_cultural_pillar = heritage_berber } + culture = culture:bedouin + is_ai = no + } + } + } + holder = { + set_variable = { + name = steppe_game_start_var + years = 1 + } + every_held_title = { + if = { + limit = { + title_province = { + has_holding_type = tribal_holding + } + } + title_province = { + set_holding_type = nomad_holding + } + } + } + change_government = nomad_government + } + } + } + } + #Horn of Africa + if = { + limit = { + has_mpo_dlc_trigger = yes + has_game_rule = horn_of_africa_nomad_region_on + } + start_situation = { + type = game_rule_extra_nomads_horn + start_phase = situation_steppe_severe_drought_season + save_scope_as = my_situation + } + scope:my_situation = { + every_situation_county = { + limit = { + holder = { + government_has_flag = government_is_tribal + OR = { + culture = culture:somali + culture = culture:beja + culture = culture:afar + culture = culture:bedouin + AND = { + is_ai = no + NOR = { + culture = culture:welayta + culture = culture:ethiopian + culture = culture:nubian + culture = culture:daju + } + } + } + } + } + holder = { + set_variable = { + name = steppe_game_start_var + years = 1 + } + every_held_title = { + if = { + limit = { + title_province = { + has_holding_type = tribal_holding + } + } + title_province = { + set_holding_type = nomad_holding + } + } + } + change_government = nomad_government + } + } + } + } + every_ruler = { + ### Every nomad in the Steppe Region gets their yurt domicile goodies ### if = { limit = { - is_landless_adventurer = yes + government_has_flag = government_is_nomadic + is_landed = yes + } + save_scope_as = holder + if = { + limit = { + NOT = { + any_held_title = { + is_nomad_title = yes + } + } + } + create_nomad_title = { + name = nomad_title_name + holder = scope:holder + government = nomad_government + save_scope_as = new_nomad_title + } + } + if = { + limit = { + exists = situation:the_great_steppe + any_character_situation = { + this = situation:the_great_steppe + } + } + add_trait = nomadic_philosophy + dynasty ?= { + every_dynasty_member = { + limit = { + top_liege ?= { + government_has_flag = government_is_nomadic + } + } + add_trait = nomadic_philosophy + } + } + } + switch = { + trigger = primary_title.tier + tier_county = { + add_gold = { + value = { + value = 0 + add = { 25 40 } + multiply = gold_value_scale_by_era + } + } + } + tier_duchy = { + add_gold = { + value = { + value = 0 + add = { 50 80 } + multiply = gold_value_scale_by_era + } + } + add_realm_law_skip_effects = nomadic_authority_2 + domicile ?= { + add_domicile_building = yurt_main_02 + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + tier_kingdom = { + add_gold = { + value = { + value = 0 + add = { 100 125 } + multiply = gold_value_scale_by_era + } + } + add_realm_law_skip_effects = nomadic_authority_3 + domicile ?= { + add_domicile_building = yurt_main_02 + add_domicile_building = yurt_main_03 + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + tier_empire = { + add_gold = { + value = { + value = 0 + add = { 150 200 } + multiply = gold_value_scale_by_era + } + } + add_realm_law_skip_effects = nomadic_authority_3 + domicile ?= { + add_domicile_building = yurt_main_02 + add_domicile_building = yurt_main_03 + add_domicile_building = yurt_main_04 + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + } + if = { + limit = { + has_royal_court = yes + NOT = { has_court_type = court_nomadic } + } + set_court_type = court_nomadic + } + every_councillor = { + limit = { + NOR = { + has_council_position = councillor_spymaster + has_council_position = councillor_court_chaplain + has_council_position = councillor_spouse + } + } + prev = { fire_councillor_skip_effects = prev } + remove_opinion = { + modifier = fired_from_council_opinion + target = prev + } + } + random_courtier = { + limit = { + is_adult = yes + } + save_scope_as = astrologer_character + prev = { + appoint_court_position = { + recipient = scope:astrologer_character + court_position = court_astrologer_court_position + } + } + } + if = { + limit = { + OR = { + NOT = { exists = cp:councillor_kurultai_1 } + NOT = { exists = cp:councillor_kurultai_2 } + NOT = { exists = cp:councillor_kurultai_3 } + NOT = { exists = cp:councillor_kurultai_4 } + } + } + ordered_vassal = { + order_by = current_military_strength + limit = { + is_councillor = no + } + make_councillor_start_up_effect = yes + } + } + if = { + limit = { + OR = { + NOT = { exists = cp:councillor_kurultai_1 } + NOT = { exists = cp:councillor_kurultai_2 } + NOT = { exists = cp:councillor_kurultai_3 } + NOT = { exists = cp:councillor_kurultai_4 } + } + } + every_knight = { + limit = { + is_councillor = no + } + make_councillor_start_up_effect = yes + } + } + ordered_councillor = { + order_by = stewardship + position = 0 + limit = { + NOR = { + has_council_position = councillor_spymaster + has_council_position = councillor_court_chaplain + has_council_position = councillor_spouse + } + } + switch = { + trigger = this + liege_or_court_owner.cp:councillor_kurultai_1 = { + set_council_task = { + task_type = task_kurultai_fertility_1 + target = liege_or_court_owner.capital_province + } + } + liege_or_court_owner.cp:councillor_kurultai_2 = { + set_council_task = { + task_type = task_kurultai_fertility_2 + target = liege_or_court_owner.capital_province + } + } + liege_or_court_owner.cp:councillor_kurultai_3 = { + set_council_task = { + task_type = task_kurultai_fertility_3 + target = liege_or_court_owner.capital_province + } + } + liege_or_court_owner.cp:councillor_kurultai_4 = { + set_council_task = { + task_type = task_kurultai_fertility_4 + target = liege_or_court_owner.capital_province + } + } + } + } + ordered_councillor = { + order_by = learning + position = 0 + limit = { + NOR = { + has_council_position = councillor_spymaster + has_council_position = councillor_court_chaplain + has_council_position = councillor_spouse + is_performing_council_task = task_kurultai_fertility_1 + is_performing_council_task = task_kurultai_fertility_2 + is_performing_council_task = task_kurultai_fertility_3 + is_performing_council_task = task_kurultai_fertility_4 + } + } + switch = { + trigger = this + liege_or_court_owner.cp:councillor_kurultai_1 = { + set_council_task = { + task_type = task_kurultai_court_astrologer_1 + target = liege_or_court_owner.capital_province + } + } + liege_or_court_owner.cp:councillor_kurultai_2 = { + set_council_task = { + task_type = task_kurultai_court_astrologer_2 + target = liege_or_court_owner.capital_province + } + } + liege_or_court_owner.cp:councillor_kurultai_3 = { + set_council_task = { + task_type = task_kurultai_court_astrologer_3 + target = liege_or_court_owner.capital_province + } + } + liege_or_court_owner.cp:councillor_kurultai_4 = { + set_council_task = { + task_type = task_kurultai_court_astrologer_4 + target = liege_or_court_owner.capital_province + } + } + } + } + #Nomadic Philosophy lobby added realms + if = { + limit = { + exists = situation:the_great_steppe + any_character_situation = { + this = situation:the_great_steppe + } + NOT = { + has_trait = nomadic_philosophy + } + } + add_trait = nomadic_philosophy + dynasty ?= { + every_dynasty_member = { + limit = { + top_liege ?= { + government_has_flag = government_is_nomadic + } + } + add_trait = nomadic_philosophy + } + } } - if = { limit = { has_realm_law = crown_authority_0 } remove_realm_law = crown_authority_0 } } + else_if = { + limit = { + government_has_flag = government_is_herder + } + if = { + limit = { gold >= 30 } + remove_short_term_gold = 27 + } + else_if = { + limit = { gold >= 25 } + remove_short_term_gold = 22 + } + else_if = { + limit = { gold >= 20 } + remove_short_term_gold = 18 + } + else_if = { + limit = { gold >= 15 } + remove_short_term_gold = 11 + } + else_if = { + limit = { gold >= 10 } + remove_short_term_gold = 5 + } + # We're fine with them having 10 gold max + + if = { + limit = { + is_ai = no + } + every_held_title = { + limit = { + tier = tier_county + title_province = { + has_holding_type = herder_holding + } + } + title_province = { + set_holding_type = nomad_holding + } + } + change_government = nomad_government + } + } + # Make sure that Realm Priests are landed theocrats where it makes sense + else_if = { + limit = { + highest_held_title_tier >= tier_duchy + } + if = { + limit = { + exists = cp:councillor_court_chaplain + cp:councillor_court_chaplain = { + is_ruler = no + } + faith = { has_doctrine = doctrine_clerical_succession_spiritual_fixed_appointment } + any_vassal = { + is_physically_able_adult = yes + is_councillor = no + government_has_flag = government_is_theocracy + can_be_court_chaplain_trigger = { COURT_OWNER = liege } + faith = liege.faith + } + } + random_vassal = { + limit = { + is_physically_able_adult = yes + is_councillor = no + government_has_flag = government_is_theocracy + can_be_court_chaplain_trigger = { COURT_OWNER = liege } + faith = liege.faith + } + weight = { + base = 1 + modifier = { + add = 1000 + faith.religious_head ?= this + } + modifier = { + add = learning + } + modifier = { + add = primary_title.tier + } + } + liege = { + assign_councillor_type = { + type = councillor_court_chaplain + remove_existing_councillor = yes + target = prev + } + } + } + } + if = { + limit = { + is_landless_adventurer = yes + } + if = { limit = { has_realm_law = crown_authority_0 } remove_realm_law = crown_authority_0 } + } + } + #Autopopulate families. + if = { + limit = { + trigger_if = { + limit = { + has_game_rule = on_generate_families_ai_only + } + is_ai = yes + } + trigger_else = { + has_game_rule = on_generate_families + } + } + trigger_event = game_rule.1001 + } + } + + if = { + limit = { + has_mpo_dlc_trigger = yes + } + #Fully Landlocked Nomad Cultures Setup + every_culture_global = { + limit = { + OR = { + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_ugro_permian + } + } + add_to_global_variable_list = { + name = fully_landlocked_nomad_cultures + target = this + } + } + add_to_global_variable_list = { + name = fully_landlocked_nomad_cultures + target = culture:kipchak + } + add_to_global_variable_list = { + name = fully_landlocked_nomad_cultures + target = culture:uyghur + } + add_to_global_variable_list = { + name = fully_landlocked_nomad_cultures + target = culture:kirghiz + } + add_to_global_variable_list = { + name = fully_landlocked_nomad_cultures + target = culture:tangut + } + add_to_global_variable_list = { + name = fully_landlocked_nomad_cultures + target = culture:bashkir + } + add_to_global_variable_list = { + name = fully_landlocked_nomad_cultures + target = culture:laktan + } + recalculate_cultural_heads_of_type = herd } ### GAME RULE: VIEW ON SAME-SEX RELATIONS @@ -1555,7 +2475,7 @@ on_game_start_after_lobby = { child_sexuality_distribution_effect = yes } - ### GAME RULE: STRUGGLE TOGGLES + ### GAME RULE: SITUATION TOGGLES struggle:iberian_struggle ?= { if = { limit = { has_game_rule = struggle_iberia_toggle_off } @@ -1568,6 +2488,12 @@ on_game_start_after_lobby = { end_struggle = yes } } + situation:the_great_steppe ?= { + if = { + limit = { has_game_rule = situation_the_great_steppe_toggle_off } + end_situation = yes + } + } ### GAME RULE: RULER OF MUNSTER if = { @@ -1857,6 +2783,32 @@ on_game_start_after_lobby = { VALUE = yes } } + if = { # Temüjin + limit = { + has_mpo_dlc_trigger = yes + exists = character:125501 + this = character:125501 + } + add_achievement_global_variable_effect = { + VARIABLE = started_the_stallion_that_mounts_the_world_achievement + VALUE = yes + } + } + if = { + limit = { + government_has_flag = government_is_nomadic + save_temporary_scope_as = nomad_ruler + situation:the_great_steppe ?= { + situation_sub_region:steppe_east = { + situation_sub_region_has_county = scope:nomad_ruler.capital_county + } + } + } + add_achievement_global_variable_effect = { + VARIABLE = started_steppe_by_steppe_achievement + VALUE = yes + } + } if = { limit = { OR = { @@ -2316,6 +3268,22 @@ on_game_start_after_lobby = { VALUE = yes } } + if = { + limit = { + has_mpo_dlc_trigger = yes + exists = character:125501 + character:125501 = { + is_alive = yes + } + } + character:125501 = { + create_story = story_temujin_flavor + trigger_event = { + days = { 12 30 } + id = mpo_temujin_flavor.0030 # Borte announces she's pregnant + } + } + } } } @@ -2329,8 +3297,8 @@ on_game_start_after_lobby = { set_global_variable = fp3_the_umma_strikes_back_achievement_tracker # Is not removed (sad!) } } - - ### ACHIEVEMENT: FROM RAGS TO RICHES TO RAGS TO RICHES + + ### ACHIEVEMENT: FROM RAGS TO RICHES TO RAGS TO RICHES every_player = { limit = { highest_held_title_tier = tier_county } add_achievement_global_variable_effect = { @@ -2990,7 +3958,7 @@ on_game_start_after_lobby = { } vassal_contract_decrease_obligation_level = feudal_government_taxes vassal_contract_decrease_obligation_level = feudal_government_levies - set_vassal_contract_modification_blocked = no + set_subject_contract_modification_blocked = no } } } @@ -3001,7 +3969,7 @@ on_game_start_after_lobby = { } add_legitimacy = base_legitimacy_value } - + if = { # Special historical events for Matilda! limit = { character:7757 ?= { is_alive = yes } @@ -3014,7 +3982,7 @@ on_game_start_after_lobby = { } } } - + if = { # Special historical events for Vratislav! limit = { character:522 ?= { is_alive = yes } @@ -3030,7 +3998,7 @@ on_game_start_after_lobby = { } } } - + if = { # Special historical events for Robert the Fox! limit = { character:1128 ?= { is_alive = yes } @@ -3046,7 +4014,7 @@ on_game_start_after_lobby = { } } } - + if = { # Special historical events for Emir Yahya! limit = { character:3924 ?= { is_alive = yes } @@ -3149,7 +4117,7 @@ on_game_start_after_lobby = { days = { 1 2 } } } - ## El Cid + ## El Cid character:107590 ?= { if = { limit = { @@ -3246,83 +4214,84 @@ on_game_start_after_lobby = { } } every_independent_ruler = { - limit = { is_landless_adventurer = yes } - # C... food. - domicile = { change_provisions = starting_provisions_value } - # Contracts if = { - limit = { is_ai = no } - # Set up additional firing contracts. - player_adventurer_contract_generation_on_wait_in_place_effect = yes - #generate contracts if you are far away from your previous location - player_adventurer_contract_generation_on_domicile_moved_effect = yes - } - else = { - create_story = { type = story_adventurer_ai } - trigger_event = { - on_action = on_adventurer_ai_new_employer_arrival - days = { 10 30 } + limit = { is_landless_adventurer = yes } + # C... food. + domicile = { change_provisions = starting_provisions_value } + # Contracts + if = { + limit = { is_ai = no } + # Set up additional firing contracts. + player_adventurer_contract_generation_on_wait_in_place_effect = yes + #generate contracts if you are far away from your previous location + player_adventurer_contract_generation_on_domicile_moved_effect = yes + } + else = { + create_story = { type = story_adventurer_ai } + trigger_event = { + on_action = on_adventurer_ai_new_employer_arrival + days = { 10 30 } + } + } + # Sort our starting flavourisation. + if = { + limit = { has_realm_law = camp_purpose_mercenaries } + set_variable = flavourise_camp_purpose_mercenaries + } + else_if = { + limit = { has_realm_law = camp_purpose_wanderers } + set_variable = flavourise_camp_purpose_wanderers + } + else_if = { + limit = { has_realm_law = camp_purpose_scholars } + set_variable = flavourise_camp_purpose_scholars + } + else_if = { + limit = { has_realm_law = camp_purpose_explorers } + set_variable = flavourise_camp_purpose_explorers + } + else_if = { + limit = { has_realm_law = camp_purpose_brigands } + set_variable = flavourise_camp_purpose_brigands + } + else_if = { + limit = { has_realm_law = camp_purpose_legitimists } + set_variable = flavourise_camp_purpose_legitimists + } + # And tally our numbers for performance purposes. + add_to_global_variable_list = { + name = laamps_tally + target = this.primary_title } } - # Sort our starting flavourisation. + ### EP3 ADMIN SETUP ### if = { - limit = { has_realm_law = camp_purpose_mercenaries } - set_variable = flavourise_camp_purpose_mercenaries - } - else_if = { - limit = { has_realm_law = camp_purpose_wanderers } - set_variable = flavourise_camp_purpose_wanderers - } - else_if = { - limit = { has_realm_law = camp_purpose_scholars } - set_variable = flavourise_camp_purpose_scholars - } - else_if = { - limit = { has_realm_law = camp_purpose_explorers } - set_variable = flavourise_camp_purpose_explorers - } - else_if = { - limit = { has_realm_law = camp_purpose_brigands } - set_variable = flavourise_camp_purpose_brigands - } - else_if = { - limit = { has_realm_law = camp_purpose_legitimists } - set_variable = flavourise_camp_purpose_legitimists - } - # And tally our numbers for performance purposes. - add_to_global_variable_list = { - name = laamps_tally - target = this.primary_title - } - } - ### EP3 ADMIN SETUP ### - every_independent_ruler = { - limit = { has_government = administrative_government } - save_scope_as = top_liege - ### EP3 NOBLE FAMILIES & DOMICILE SETUP ### - random_held_title = { # May be removed once every_noble_family includes liege (TIT-51212) - limit = { is_noble_family_title = yes } - set_coa = scope:top_liege.house - } - every_noble_family = { - # Ensure Noble Family CoA match House - set_coa = holder.house - # Ensure holders of historical noble family titles are the default house heads - holder ?= { - save_scope_as = nf_holder - if = { - limit = { is_landed = yes } - capital_province = { save_scope_as = domicile_location } - } - # TODO_CD_EP3: remove once TIT-51212 is resolved and confirmed - house ?= { + limit = { government_has_flag = government_is_administrative } + save_scope_as = top_liege + ### EP3 NOBLE FAMILIES & DOMICILE SETUP ### + random_held_title = { # May be removed once every_noble_family includes liege (TIT-51212) + limit = { is_noble_family_title = yes } + set_coa = scope:top_liege.house + } + every_noble_family = { + # Ensure Noble Family CoA match House + set_coa = holder.house + # Ensure holders of historical noble family titles are the default house heads + holder ?= { + save_scope_as = nf_holder if = { - limit = { house_head != scope:nf_holder } - set_house_head = scope:nf_holder + limit = { is_landed = yes } + capital_province = { save_scope_as = domicile_location } + } + house ?= { + if = { + limit = { house_head != scope:nf_holder } + set_house_head = scope:nf_holder + } } } + set_color_from_title = scope:nf_holder.capital_county } - set_color_from_title = scope:nf_holder.capital_county } } } @@ -3388,6 +4357,7 @@ on_game_start_after_lobby = { if = { limit = { is_domicile_type = estate + exists = owner } if = { limit = { @@ -3397,7 +4367,7 @@ on_game_start_after_lobby = { add_domicile_building = estate_main_02 add_random_internal_estate_building = yes } - + fill_external_estate_building_effect = yes } } @@ -3594,6 +4564,7 @@ on_game_start_after_lobby = { if = { limit = { is_domicile_type = estate + exists = owner } if = { limit = { @@ -3615,7 +4586,7 @@ on_game_start_after_lobby = { add_random_internal_estate_building = yes } } - + fill_external_estate_building_effect = yes } } @@ -3637,6 +4608,47 @@ on_game_start_after_lobby = { } } } + + every_county_in_region = { + region = world_steppe + limit = { + uses_county_fertility = yes + } + + if = { + limit = { + holder = { + government_has_flag = government_is_nomadic + } + county_fertility > 20 + county_fertility <= 90 + } + switch = { + trigger = holder.primary_title.tier + tier_empire = { + change_county_fertility = { 16 32 } + } + tier_kingdom = { + change_county_fertility = { 12 16 } + } + tier_duchy = { + change_county_fertility = { 8 12 } + } + tier_county = { + change_county_fertility = { 2 8 } + } + } + } + else_if = { + limit = { + holder = { + government_has_flag = government_is_herder + } + } + change_county_fertility = { 44 64 } + } + } + # Conquerors character:144133 ?= { if = { @@ -3674,35 +4686,100 @@ on_game_start_after_lobby = { create_story = story_conqueror } } - ### NEOW - # Benelux Claims - character:benelux_oranje_nassau_weilburg_guillem ?= { - if = { + + every_player = { + limit = { + is_landed = yes + } + while = { + count = 7 limit = { - is_alive = yes + any_courtier = { + count < 7 + is_adult = yes + } + } + save_scope_as = player_scope + random_list = { + 1 = { + create_character = { + employer = scope:player_scope + age = { 20 30 } + random_traits = yes + gender_female_chance = scope:player_scope.marriage_gender_adjusted_female_chance + culture = scope:player_scope.culture + faith = scope:player_scope.faith + after_creation = { + random_list = { + 200 = { + # Character is of average weight, nothing happens + } + 25 = { + change_current_weight = -25 + } + 25 = { + change_current_weight = -75 + } + 25 = { + change_current_weight = 25 + } + 25 = { + change_current_weight = 75 + } + 5 = { + change_current_weight = 150 + } + } + } + } + } + 4 = { + create_character = { + employer = scope:player_scope + age = { 20 40 } + random_traits = yes + gender_female_chance = 15 + culture = scope:player_scope.culture + faith = scope:player_scope.faith + after_creation = { + random_list = { + 200 = { + # Character is of average weight, nothing happens + } + 25 = { + change_current_weight = -25 + } + 25 = { + change_current_weight = -75 + } + 25 = { + change_current_weight = 25 + } + 25 = { + change_current_weight = 75 + } + 5 = { + change_current_weight = 150 + } + } + } + } + } } - trigger_event = benelux.1 - } - } - character:benelux_oranje_nassau_weilburg_philippe ?= { - if = { - limit = { - is_alive = yes - } - trigger_event = benelux.2 - } - } - character:benelux_oranje_nassau_weilburg_hendrick ?= { - if = { - limit = { - is_alive = yes - } - trigger_event = benelux.3 } } + + # Sanity check the setup if in debug mode + if = { + limit = { + debug_only = yes + } + run_setup_tests_effect = yes + } + set_global_variable = game_has_started } + events = { - game_rule.1000 #Autopopulate families. game_rule.1011 #Hungarian Migration management. historical_artifacts.0023 # Historical Artifacts Generator } diff --git a/common/on_action/title_on_actions.txt b/common/on_action/title_on_actions.txt index 1096698e..6245c36f 100644 --- a/common/on_action/title_on_actions.txt +++ b/common/on_action/title_on_actions.txt @@ -78,7 +78,7 @@ on_title_destroyed = { # If the title of an independent admin ruler is destroyed, let's make sure we handle any stray admin vassals if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = yes NOT = { any_held_title = { @@ -99,6 +99,365 @@ on_title_destroyed = { # scope:previous_holder = previous holder. Might be dead on_title_gain = { effect = { + # Nomads + scope:title = { + if = { + limit = { + is_nomad_title = yes + exists = title_domicile + } + if = { + limit = { + root = { + any_held_title = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + } + } + } + if = { + limit = { + root = { + any_held_title = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + exists = var:player_domicile_title + } + } + } + root = { + random_held_title = { + limit = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + exists = var:player_domicile_title + } + title_domicile = { + if = { + limit = { + exists = root.dynasty + scope:previous_holder.dynasty ?= root.dynasty + } + change_herd = { + value = scope:title.title_domicile.herd + } + } + } + root = { + destroy_title = scope:title + } + } + } + } + else_if = { + limit = { + is_nomad_title = yes + exists = title_domicile + exists = var:player_domicile_title + } + root = { + random_held_title = { + limit = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + } + save_scope_as = old_nomad_title_to_clean_up + } + } + title_domicile = { + if = { + limit = { + exists = root.dynasty + scope:previous_holder.dynasty ?= root.dynasty + } + change_herd = { + value = scope:old_nomad_title_to_clean_up.title_domicile.herd + } + } + } + root = { + destroy_title = scope:old_nomad_title_to_clean_up + } + } + else_if = { + limit = { + root = { + any_held_title = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + title_domicile.herd > scope:title.title_domicile.herd + } + } + } + root = { + random_held_title = { + limit = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + title_domicile.herd > scope:title.title_domicile.herd + } + title_domicile = { + if = { + limit = { + exists = root.dynasty + scope:previous_holder.dynasty ?= root.dynasty + } + change_herd = { + value = scope:title.title_domicile.herd + } + } + } + } + destroy_title = scope:title + } + } + else = { + root = { + random_held_title = { + limit = { + is_nomad_title = yes + exists = title_domicile + NOT = { this = scope:title } + } + save_scope_as = old_nomad_title_to_clean_up + } + } + title_domicile = { + if = { + limit = { + exists = root.dynasty + scope:previous_holder.dynasty ?= root.dynasty + } + change_herd = { + value = scope:old_nomad_title_to_clean_up.title_domicile.herd + } + } + } + root = { + destroy_title = scope:old_nomad_title_to_clean_up + } + } + } + if = { + limit = { + exists = title_domicile + exists = global_var:game_has_started + NOT = { + exists = previous_holder + } + } + if = { + limit = { + root = { + OR = { + house.house_head ?= { + this != root + any_held_title = { + is_nomad_title = yes + } + } + dynasty.dynast ?= { + this != root + any_held_title = { + is_nomad_title = yes + } + } + any_close_family_member = { + this != root + any_held_title = { + is_nomad_title = yes + } + } + } + } + } + generate_coa = yes # To lessen confusion thinking titles are the same + } + if = { + limit = { + current_year >= 1300 + } + title_domicile = { + add_domicile_building = yurt_main_02 + add_domicile_building = yurt_main_03 + add_domicile_building = yurt_main_04 + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + else_if = { + limit = { + current_year >= 1200 + } + title_domicile = { + add_domicile_building = yurt_main_02 + add_domicile_building = yurt_main_03 + add_domicile_building = yurt_main_04 + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + else_if = { + limit = { + current_year >= 1100 + } + title_domicile = { + add_domicile_building = yurt_main_02 + if = { + limit = { + has_domicile_building = yurt_main_02 + owner ?= { + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + } + add_domicile_building = yurt_main_03 + } + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + else_if = { + limit = { + current_year >= 900 + } + title_domicile = { + add_domicile_building = yurt_main_02 + add_random_yurt_external_building_effect = yes + add_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + upgrade_random_yurt_external_building_effect = yes + } + } + } + } + ########### + # Nomads switch faith/culture of conquered nomadic counties + ########### + if = { + limit = { + tier = tier_county + title_province ?= { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + root = { + government_has_flag = government_is_nomadic + exists = domicile + } + } + if = { + limit = { + root = { + has_character_flag = domicile_culture_and_faith_check + OR = { + domicile.domicile_culture != scope:title.culture + domicile.domicile_faith != scope:title.faith + } + } + } + root.domicile = { + set_domicile_culture = scope:title.culture + set_domicile_faith = scope:title.faith + } + root = { + remove_character_flag = domicile_culture_and_faith_check + } + } + else = { + if = { + limit = { + root.domicile.domicile_culture != scope:title.culture + } + scope:title ?= { + set_variable = { + name = migration_previous_culture + value = culture + } + } + set_county_culture = root.domicile.domicile_culture + } + if = { + limit = { + root.domicile.domicile_faith != scope:title.faith + } + set_county_faith = root.domicile.domicile_faith + } + } + } + } + ########### + # Nomads leaving confederacies + ########### + if = { + limit = { + is_confederation_member = yes + scope:title.tier >= tier_kingdom + } + confederation = { + remove_confederation_member = root + } + } # EP3 ADVENTURERS BECOMING LANDED if = { limit = { @@ -108,7 +467,10 @@ on_title_gain = { save_scope_as = adventurer if = { limit = { - NOT = { has_trait = adventurer } + NOR = { + has_trait = adventurer + government_has_flag = government_is_nomadic + } } add_trait = adventurer } @@ -119,6 +481,33 @@ on_title_gain = { } add_trait = adventurer_follower } + if = { + limit = { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + add_legitimacy = massive_legitimacy_gain + set_variable = { + name = legacy_adventurers_to_levies + value = 0 + } + every_courtier = { + root = { + change_variable = { name = legacy_adventurers_to_levies add = 25 } + } + } + every_held_title = { + limit = { has_variable = adventurer_creation_reason } + save_scope_as = prev_title + } + spawn_army = { + levies = var:legacy_adventurers_to_levies + location = capital_province + name = remnants_adventurer_army + } + remove_variable = legacy_adventurers_to_levies + } destroy_laamp_effect = { ADVENTURER = scope:adventurer } # EP3 - Ensure NF holders are Admin if = { @@ -132,12 +521,12 @@ on_title_gain = { # Note: anything that should be run after creation can go in on_noble_family_title_created if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative is_house_head = yes highest_held_title_tier >= tier_duchy liege = { is_independent_ruler = yes - has_government = administrative_government + government_has_flag = government_is_administrative } NOR = { any_held_title = { is_noble_family_title = yes } @@ -151,10 +540,80 @@ on_title_gain = { create_noble_family_effect = yes domicile ?= { set_up_domicile_estate_effect = yes } } + # Apply Law of the Land title succession law if appropriate + scope:title = { + add_law_of_the_land_title_succession_law_if_appropriate_effect = yes + } + # MPO - edge case Nomadic Philosophy handover, factions, unlikely claimants, etc etc + if = { + limit = { + primary_title = { + this = scope:title + } + government_has_flag = government_is_nomadic + NOT = { + has_trait = nomadic_philosophy + } + exists = situation:the_great_steppe + any_character_situation = { + this = situation:the_great_steppe + } + } + add_trait = nomadic_philosophy + every_heir = { + limit = { + top_liege ?= root + NOT = { + has_trait = nomadic_philosophy + } + } + add_trait = nomadic_philosophy + } + } + # MPO - Siberian permafrost modifier switcharoo + if = { + limit = { + scope:title = { + tier = tier_county + title_province = { + geographical_region = geographical_region:mpo_region_permafrost + } + } + } + if = { + limit = { + scope:title = { + has_county_modifier = mpo_siberian_permafrost_modifier_bad + } + culture ?= scope:title.culture + culture ?= { has_cultural_parameter = permafrost_modifier_mechanic } + } + scope:title = { + remove_county_modifier = mpo_siberian_permafrost_modifier_bad + add_county_modifier = mpo_siberian_permafrost_modifier + } + } + else_if = { + limit = { + scope:title = { + has_county_modifier = mpo_siberian_permafrost_modifier + } + NOT = { + culture ?= scope:title.culture + culture ?= { has_cultural_parameter = permafrost_modifier_mechanic } + } + } + scope:title = { + remove_county_modifier = mpo_siberian_permafrost_modifier + add_county_modifier = mpo_siberian_permafrost_modifier_bad + } + } + + } # EP3 - Ensure Emperor keeps old realm capital in admin realms & apply unique domicile building bonus if appropriate if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = yes highest_held_title_tier >= tier_empire } @@ -183,7 +642,7 @@ on_title_gain = { # EP3 - Fire a became governor event else_if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = no is_governor = yes any_held_title = { @@ -214,6 +673,7 @@ on_title_gain = { if = { limit = { has_character_flag = peasant_outfit + NOT = { government_has_flag = government_is_herder } } remove_character_flag = peasant_outfit } @@ -367,72 +827,67 @@ on_title_gain = { #Struggle Catalyst if = { limit = { - scope:title.tier >= tier_county - title:e_persia = { - any_in_de_jure_hierarchy = { - this = scope:title - } + exists = struggle:persian_struggle + exists = scope:title.empire + scope:title = { + empire = title:e_persia + tier >= tier_county + is_landless_type_title = no } NOR = { scope:transfer_type = flag:created scope:transfer_type = flag:inheritance } - fp3_character_uninvolved_in_struggle_trigger = yes + } + if = { + limit = { + fp3_character_uninvolved_in_struggle_trigger = yes + scope:previous_holder ?= { + fp3_character_involved_in_struggle_trigger = yes + any_character_struggle = { + phase_has_catalyst = catalyst_interloper_uninvolved_gain_struggle_titles + } + } + } scope:previous_holder ?= { + every_character_struggle = { + limit = { phase_has_catalyst = catalyst_interloper_uninvolved_gain_struggle_titles } + activate_struggle_catalyst = { + catalyst = catalyst_interloper_uninvolved_gain_struggle_titles + character = root + } + log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_interloper_uninvolved_gain_struggle_titles } + } + } + } + if = { + limit = { fp3_character_involved_in_struggle_trigger = yes any_character_struggle = { - phase_has_catalyst = catalyst_interloper_uninvolved_gain_struggle_titles + phase_has_catalyst = catalyst_gain_struggle_titles_from_interlopers_uninvolved + # Stop catalyst from affecting those who are only just now uninvolved due to losing this title + OR = { + NOT = { is_culture_involved_in_struggle = scope:previous_holder.culture } + NOT = { is_faith_involved_in_struggle = scope:previous_holder.faith } + } + } + scope:previous_holder ?= { + OR = { + fp3_character_uninvolved_in_struggle_trigger = yes + fp3_character_interloper_in_struggle_trigger = yes + } } } - } - scope:previous_holder ?= { every_character_struggle = { - limit = { phase_has_catalyst = catalyst_interloper_uninvolved_gain_struggle_titles } + limit = { phase_has_catalyst = catalyst_gain_struggle_titles_from_interlopers_uninvolved } activate_struggle_catalyst = { - catalyst = catalyst_interloper_uninvolved_gain_struggle_titles + catalyst = catalyst_gain_struggle_titles_from_interlopers_uninvolved character = root } - log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_interloper_uninvolved_gain_struggle_titles } + log_debug_variable_for_persian_struggle_effect = { VAR = stabil_catalyst_gain_struggle_titles_from_interlopers_uninvolved } } } } - if = { - limit = { - scope:title.tier >= tier_county - title:e_persia = { - any_in_de_jure_hierarchy = { - this = scope:title - } - } - NOR = { - scope:transfer_type = flag:created - scope:transfer_type = flag:inheritance - } - fp3_character_involved_in_struggle_trigger = yes - any_character_struggle = { - phase_has_catalyst = catalyst_gain_struggle_titles_from_interlopers_uninvolved - # Stop catalyst from affecting those who are only just now uninvolved due to losing this title - OR = { - NOT = { is_culture_involved_in_struggle = scope:previous_holder.culture } - NOT = { is_faith_involved_in_struggle = scope:previous_holder.faith } - } - } - scope:previous_holder ?= { - OR = { - fp3_character_uninvolved_in_struggle_trigger = yes - fp3_character_interloper_in_struggle_trigger = yes - } - } - } - every_character_struggle = { - limit = { phase_has_catalyst = catalyst_gain_struggle_titles_from_interlopers_uninvolved } - activate_struggle_catalyst = { - catalyst = catalyst_gain_struggle_titles_from_interlopers_uninvolved - character = root - } - log_debug_variable_for_persian_struggle_effect = { VAR = stabil_catalyst_gain_struggle_titles_from_interlopers_uninvolved } - } - } # Achievements if = { # FP2 El Cid @@ -680,7 +1135,7 @@ on_title_gain = { } } # Admin only - has_government = administrative_government + government_has_flag = government_is_administrative } trigger_event = { id = ep3_emperor_yearly.2050 @@ -707,7 +1162,7 @@ on_title_gain = { if = { limit = { has_ep3_dlc_trigger = yes - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = yes highest_held_title_tier >= tier_kingdom scope:title = { @@ -765,7 +1220,7 @@ on_title_gain = { limit = { is_playable_character = yes exists = scope:previous_holder - has_government = administrative_government + government_has_flag = government_is_administrative OR = { highest_held_title_tier >= tier_duchy liege = root @@ -793,7 +1248,7 @@ on_title_gain = { if = { limit = { has_ep3_dlc_trigger = yes - has_government = administrative_government + government_has_flag = government_is_administrative has_succession_appointment_investors = scope:title scope:title = { any_succession_appointment_investors = { @@ -902,13 +1357,13 @@ on_title_gain = { limit = { scope:title.tier > tier_barony primary_title.tier <= scope:title.tier - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { has_character_flag = admin_title_gain_notification_sent } house ?= { any_house_member = { is_ai = no top_liege = root.top_liege - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { this = root } } } @@ -923,7 +1378,7 @@ on_title_gain = { limit = { is_ai = no top_liege = root.top_liege - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { this = scope:title_gainer } } send_interface_message = { @@ -1077,173 +1532,6 @@ on_title_gain = { # BP3 - Inspector perks cleanup effect landless_inspector_cleanup_modifier = yes - ### NEOW ### - ## Carolingian Name Changes - # Benelux -> Lotharingia - if = { - limit = { - scope:title = { tier = tier_empire } - has_title = title:e_benelux - root = { - faith = faith:carolingian - } - } - trigger_event = { - id = NEOW_dynamic_titles.0009 - } - } - if = { - limit = { - scope:title = { tier = tier_empire } - has_title = title:e_benelux - NOT = { - root = { - faith = faith:carolingian - } - } - } - trigger_event = { - id = NEOW_dynamic_titles.0010 - } - } - # Netherlands -> Teisterbant - if = { - limit = { - scope:title = { tier = tier_kingdom } - has_title = title:k_frisia - root = { - faith = faith:carolingian - } - } - trigger_event = { - id = NEOW_dynamic_titles.0007 - } - } - if = { - limit = { - scope:title = { tier = tier_kingdom } - has_title = title:k_frisia - NOT = { - root = { - faith = faith:carolingian - } - } - } - trigger_event = { - id = NEOW_dynamic_titles.0008 - } - } - # Luxembourg -> Moselle - if = { - limit = { - scope:title = { tier = tier_kingdom } - has_title = title:k_lotharingia - root = { - faith = faith:carolingian - } - } - trigger_event = { - id = NEOW_dynamic_titles.0005 - } - } - if = { - limit = { - scope:title = { tier = tier_kingdom } - has_title = title:k_lotharingia - NOT = { - root = { - faith = faith:carolingian - } - } - } - trigger_event = { - id = NEOW_dynamic_titles.0006 - } - } - # Belgium -> Austrasia - if = { - limit = { - scope:title = { tier = tier_kingdom } - has_title = title:k_belgium - root = { - faith = faith:carolingian - } - } - trigger_event = { - id = NEOW_dynamic_titles.0003 - } - } - if = { - limit = { - scope:title = { tier = tier_kingdom } - has_title = title:k_belgium - NOT = { - root = { - faith = faith:carolingian - } - } - } - trigger_event = { - id = NEOW_dynamic_titles.0004 - } - } - ## Numenorian Name Changes - # Empire of France -> Numenor - if = { - limit = { - scope:title = { tier = tier_empire } - has_title = title:e_france - root = { - faith = faith:numenorian - } - } - trigger_event = { - id = NEOW_dynamic_titles.0011 - } - } - if = { - limit = { - scope:title = { tier = tier_empire} - has_title = title:e_france - NOT = { - root = { - faith = faith:numenorian - } - } - } - trigger_event = { - id = NEOW_dynamic_titles.0012 - } - } - # France -> Gondor - if = { - limit = { - scope:title = { tier = tier_kingdom } - has_title = title:k_france - root = { - faith = faith:numenorian - } - } - trigger_event = { - id = NEOW_dynamic_titles.0001 - } - } - if = { - limit = { - scope:title = { tier = tier_kingdom } - has_title = title:k_france - NOT = { - root = { - faith = faith:numenorian - } - } - } - trigger_event = { - id = NEOW_dynamic_titles.0002 - } - } - ### NEOW End - ### MEMORIES - SHOULD STAY AT BOTTOM ### # Ascended to the throne if = { @@ -1252,7 +1540,7 @@ on_title_gain = { is_ruler = no highest_held_title_tier <= scope:title.tier government_has_flag = government_is_landless_adventurer - has_government = administrative_government + government_has_flag = government_is_administrative } } if = { @@ -1316,7 +1604,32 @@ on_title_gain = { } } } - ### MEMORIES - SHOULD STAY AT BOTTOM ### + #Mongol empire and GoK should lose other empires + if = { + limit = { + primary_title ?= { + OR = { + this = title:e_mongol_empire + AND = { + exists = global_var:greatest_of_khans_title + this = global_var:greatest_of_khans_title + } + } + } + scope:title = { + tier = tier_empire + NOR = { + this = title:e_mongol_empire + AND = { + exists = global_var:greatest_of_khans_title + this = global_var:greatest_of_khans_title + } + } + } + is_ai = yes + } + destroy_title = scope:title + } } events = { roman_restoration.0005 #New Roman Emperor gets Augustus trait. (old holder, if still alive, loses it) @@ -1343,6 +1656,7 @@ on_title_gain = { # scope:previous_holder = previous holder. Should be dead on_title_gain_inheritance = { events = { + diarchy.0011 delay = { days = 1 } # Try to end inherited entrenched regencies automatically — we need to launder this by a day to make sure the AI realises they've inherited a diarchy. diarchy.0113 @@ -1350,7 +1664,15 @@ on_title_gain_inheritance = { effect = { if = { limit = { - scope:title = title:e_mongol_empire + scope:title = { + OR = { + this = title:e_mongol_empire + AND = { + exists = global_var:greatest_of_khans_title + this = global_var:greatest_of_khans_title + } + } + } has_character_flag = gain_mongol_succession_dread } add_dread = 50 @@ -1563,6 +1885,7 @@ on_title_lost = { if = { limit = { scope:title.tier >= tier_county + scope:title = { is_landless_type_title = no } OR = { scope:transfer_type = flag:conquest scope:transfer_type = flag:conquest_holy_war @@ -1684,7 +2007,7 @@ on_title_lost = { title_province = { any_province_domicile = { is_domicile_type = estate - owner = { + owner ?= { NOT = { top_liege = scope:new_holder.top_liege } } } @@ -1698,7 +2021,7 @@ on_title_lost = { title_province = { any_province_domicile = { is_domicile_type = estate - owner = { + owner ?= { NOT = { top_liege = scope:new_holder.top_liege } } } @@ -1708,7 +2031,7 @@ on_title_lost = { every_province_domicile = { limit = { is_domicile_type = estate - owner = { + owner ?= { NOT = { top_liege = scope:new_holder.top_liege } } } @@ -1881,7 +2204,7 @@ on_title_lost = { } is_alive = yes NOT = { has_character_flag = admin_title_loss_notification_sent } - has_government = administrative_government + government_has_flag = government_is_administrative house ?= { any_house_member = { is_ai = no @@ -1889,7 +2212,7 @@ on_title_lost = { limit = { exists = root.top_liege } top_liege = root.top_liege } - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { this = root } } } @@ -1907,7 +2230,7 @@ on_title_lost = { limit = { exists = root.top_liege } top_liege = root.top_liege } - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { this = scope:title_loser } } send_interface_message = { @@ -1993,6 +2316,64 @@ on_title_lost = { # BP3 - Inspector perks cleanup effect landless_inspector_cleanup_modifier = yes + + #End Greatest of Khans story if title was lost + if = { + limit = { + any_owned_story = { + story_type = story_greatest_of_khans + } + global_var:greatest_of_khans_title ?= { + this = scope:title + } + OR = { + NOT = { + exists = scope:new_holder + } + scope:new_holder = { + NOR = { + AND = { + exists = dynasty + dynasty ?= root.dynasty + } + is_grandchild_of = root + is_child_of = root + } + } + } + } + if = { + limit = { + is_alive = yes + } + trigger_event = { + id = mpo_greatest_of_khans.0040 + days = 1 + } + } + else_if = { + limit = { + exists = root.player_heir + exists = root.dynasty + player_heir = { + dynasty ?= story_owner.dynasty + } + } + player_heir ?= { + trigger_event = { + id = mpo_greatest_of_khans.0040 + days = 1 + } + } + } + else = { + every_owned_story = { + limit = { story_type = story_greatest_of_khans } + end_story = yes + } + remove_character_modifier = the_great_khan_modifier + } + } } } @@ -2226,6 +2607,17 @@ on_vassal_gained = { realm_maintenance.1000 # Notify vassals of new liege } effect = { + #Confederation members must be independent + if = { + limit = { + scope:vassal = { + is_confederation_member = yes + } + } + scope:vassal.confederation = { + remove_confederation_member = scope:vassal + } + } # EP3 LANDLESS CANNOT HAVE VASSALS if = { limit = { has_any_landed_title_trigger = no } @@ -2273,7 +2665,7 @@ on_vassal_change = { limit = { OR = { liege ?= { - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } } AND = { is_independent_ruler = yes @@ -2322,12 +2714,12 @@ on_vassal_change = { ### If a admin duke-tier character becomes the top-liege's direct vassal, ensure that they have a noble family title if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative is_house_head = yes highest_held_title_tier >= tier_duchy liege = { is_independent_ruler = yes - has_government = administrative_government + government_has_flag = government_is_administrative } NOR = { any_held_title = { is_noble_family_title = yes } @@ -2376,7 +2768,7 @@ on_baron_found_or_created_for_title = { # scope:old_capital - previous capital barony. Can be empty, can be owned by someone else on_realm_capital_change = { effect = { - holder = { + holder ?= { # Do we need to refresh their vizier's modifiers? if = { limit = { has_diarchy_parameter = diarchy_is_vizierate } diff --git a/common/script_values/00_activity_values.txt b/common/script_values/00_activity_values.txt index ea89990a..18e73e5f 100644 --- a/common/script_values/00_activity_values.txt +++ b/common/script_values/00_activity_values.txt @@ -542,6 +542,20 @@ feast_activity_cost = { } multiply = 0.5 } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } feast_normal_option_cost = { @@ -689,6 +703,20 @@ standard_activity_base_cost = { } add = 50 } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } # Deprecated @@ -762,6 +790,20 @@ standard_playdate_activity_cost = { } multiply = 0.5 } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } @@ -921,7 +963,7 @@ petition_liege_county_convert_count_value = { petition_liege_county_convert_modifier_value = { value = 0 add = court_chaplain_conversion_base_total - multiply = 0.1 + multiply = 0.3 } ### Opinion @@ -1520,12 +1562,40 @@ funeral_normal_option_cost = { value = 10 multiply = activity_cost_scale_by_tier multiply = activity_cost_scale_by_era + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } funeral_good_option_cost = { value = 35 multiply = activity_cost_scale_by_tier multiply = activity_cost_scale_by_era + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } funeral_activity_cost_discount_max = { @@ -1623,6 +1693,16 @@ funeral_end_piety_gain = { } add = 50 } + if = { + limit = { + scope:activity = { + activity_location = { + has_building_or_higher = wawel_cathedral_01 + } + } + } + add = 50 + } if = { limit = { scope:activity = { @@ -1795,6 +1875,16 @@ funeral_end_legitimacy_gain = { } add = 10 } + if = { + limit = { + scope:activity = { + activity_location = { + has_building_or_higher = wawel_cathedral_01 + } + } + } + add = 10 + } if = { limit = { scope:activity = { @@ -2342,6 +2432,26 @@ survey_province_reference_value = { inspection_success_chance_value = { if = { + limit = { + activity_host = { is_ai = no } + activity_location = { has_province_modifier = inspection_fourth_try_modifier } + } + add = { + value = 30 + desc = inspection_success_chance.second_try_modifier + } + } + else_if = { + limit = { + activity_host = { is_ai = no } + activity_location = { has_province_modifier = inspection_third_try_modifier } + } + add = { + value = 20 + desc = inspection_success_chance.second_try_modifier + } + } + else_if = { limit = { activity_host = { is_ai = no } activity_location = { has_province_modifier = inspection_second_try_modifier } diff --git a/common/script_values/00_ai_values.txt b/common/script_values/00_ai_values.txt index 318bf830..03b54445 100644 --- a/common/script_values/00_ai_values.txt +++ b/common/script_values/00_ai_values.txt @@ -346,6 +346,16 @@ conqueror_safe_spending_gold = { # Conquerors generally want to keep more gold t multiply = 2 } +current_power_with_allies_value = { + value = military_power + every_ally = { add = military_power } +} + +current_power_ninety_percent_value = { + value = military_power + multiply = 0.9 +} + # Calc rough opinion values. calc_rough_liege_opinion_value = { if = { @@ -1547,6 +1557,24 @@ ai_men_at_arms_expense_gold_ideal = { value = 0.4 desc = "default value" } + if = { + limit = { + government_has_flag = government_is_nomadic + } + add = { + desc = government_is_nomadic + value = 0.15 + if = { + limit = { + max_military_strength >= 100 + domicile.num_domicile_buildings <= 4 + } + add = -0.2 + } + } + } + + if = { limit = { ai_has_warlike_personality = yes @@ -1734,7 +1762,7 @@ ai_men_at_arms_expense_gold_max = { } if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { vassal_contract_has_flag = admin_theme_civilian } } add = { @@ -1748,7 +1776,10 @@ ai_men_at_arms_expense_gold_max = { if = { limit = { - has_government = administrative_government + OR = { + government_has_flag = government_is_administrative + government_has_flag = government_is_nomadic + } debt_level <= 2 } value = 3 @@ -2252,7 +2283,7 @@ ai_men_at_arms_chance_expense_below_ideal = { ### Brief: ai_men_at_arms_chance_landless_ruler # Chance the AI will prefer MaA to buildings when they are a landless ruler. -# Is used exclusively when the character fulfils the requirement: +# Is used exclusively when the character fulfills the requirement: # - they are a ruler (they hold a title, which also means adventurers) # - they are not landed # @@ -2284,7 +2315,7 @@ ai_men_at_arms_chance_landless_ruler = { } if = { # Landless admin focus mostly on Buildings limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } add = -0.3 } diff --git a/common/script_values/00_basic_values.txt b/common/script_values/00_basic_values.txt index 7e26dd16..02e23c9c 100644 --- a/common/script_values/00_basic_values.txt +++ b/common/script_values/00_basic_values.txt @@ -228,6 +228,7 @@ current_gold_value = { default_event_cooldown_duration = 730 long_event_cooldown_duration = 1200 default_favor_duration = 3650 +prophecy_duration = 25 #years #SKILL RATINGS average_skill_rating = 8 #Tracks what we see as "typical". For use in duels, etc. @@ -489,6 +490,11 @@ major_dread_gain = 30 massive_dread_gain = 50 monumental_dread_gain = 70 +minor_dread_value = 20 +medium_dread_value = 45 +major_dread_value = 70 +massive_dread_value = 95 + execute_interaction_minor_dread_gain = 5 execute_interaction_medium_dread_gain = 10 execute_interaction_major_dread_gain = 15 @@ -871,6 +877,7 @@ minor_piety_value = 50 medium_piety_value = 100 major_piety_value = 250 massive_piety_value = 500 +monumental_piety_value = 1000 miniscule_piety_loss = { @@ -893,12 +900,17 @@ massive_piety_loss = { value = 0 subtract = massive_piety_value } +monumental_piety_loss = { + value = 0 + subtract = monumental_piety_value +} miniscule_piety_gain = miniscule_piety_value minor_piety_gain = minor_piety_value medium_piety_gain = medium_piety_value major_piety_gain = major_piety_value massive_piety_gain = massive_piety_value +monumental_piety_gain = monumental_piety_value omega_piety_gain = { value = massive_piety_value @@ -1636,6 +1648,20 @@ vassal_obligation_increase_tyranny_gain_multiplier = { vassal_obligation_increase_tyranny_gain = { value = vassal_obligation_increase_tyranny_gain_base multiply = vassal_obligation_increase_tyranny_gain_multiplier + if = { + limit = { + is_ai = no + has_game_rule = hard_difficulty + } + multiply = 3 + } + else_if = { + limit = { + is_ai = no + has_game_rule = very_hard_difficulty + } + multiply = 5 + } } #REALM SIZE diff --git a/common/script_values/00_character_values.txt b/common/script_values/00_character_values.txt index 7e061df4..9ab3e49d 100644 --- a/common/script_values/00_character_values.txt +++ b/common/script_values/00_character_values.txt @@ -138,6 +138,13 @@ random_nickname_chance = { } add = 1 } + if = { + limit = { + government_has_flag = government_is_nomadic + age >= 25 + } + add = 10 + } if = { limit = { has_game_rule = random_nickname_frequency_halved diff --git a/common/script_values/00_council_values.txt b/common/script_values/00_council_values.txt index 2c6c1495..385f50c5 100644 --- a/common/script_values/00_council_values.txt +++ b/common/script_values/00_council_values.txt @@ -16,6 +16,8 @@ spymaster_task_modifier_duration = 1825 court_chaplain_task_side_effect_cooldown = 365 court_chaplain_task_modifier_duration = 1825 +kurultai_task_side_effect_cooldown = 95 + council_scaled_monthly_income = { add = liege.highest_held_title_tier subtract = 2 @@ -51,7 +53,23 @@ council_task_fabricate_claim_relative_strength = { council_scaled_by_liege_tier_not_admin = { value = council_scaled_by_liege_tier if = { - limit = { has_government = administrative_government } + limit = { government_has_flag = government_is_administrative } + multiply = 0 + } +} + +council_scaled_by_liege_tier_nomad = { + value = council_scaled_by_liege_tier + if = { + limit = { NOT = { government_has_flag = government_is_nomadic } } + multiply = 0 + } +} + +council_scaled_by_liege_tier_not_nomad = { + value = council_scaled_by_liege_tier + if = { + limit = { government_has_flag = government_is_nomadic } multiply = 0 } } @@ -60,7 +78,7 @@ council_scaled_admin_value = { value = 0 # This value should be 0 for anyone who isn't admin if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } add = 1 if = { diff --git a/common/script_values/00_county_control_values.txt b/common/script_values/00_county_control_values.txt index dfdf33d0..2111a070 100644 --- a/common/script_values/00_county_control_values.txt +++ b/common/script_values/00_county_control_values.txt @@ -94,6 +94,36 @@ county_corruption_modifier_count = { } add = 1 } + if = { + limit = { + has_county_modifier = county_corruption_roaming_bandits_modifier + } + add = 1 + } + if = { + limit = { + has_county_modifier = county_corruption_wild_beast_attacks_modifier + } + add = 1 + } + if = { + limit = { + has_county_modifier = county_corruption_upset_shepherds_modifier + } + add = 1 + } + if = { + limit = { + has_county_modifier = county_corruption_rogue_warriors_modifier + } + add = 1 + } + if = { + limit = { + has_county_modifier = county_corruption_unruly_nomads_modifier + } + add = 1 + } } county_control_corruption_gain_chance = { diff --git a/common/script_values/00_county_fertility.txt b/common/script_values/00_county_fertility.txt new file mode 100644 index 00000000..6132e5a4 --- /dev/null +++ b/common/script_values/00_county_fertility.txt @@ -0,0 +1,96 @@ +# COUNTY FERTILITY VALUES +# GATHERED TOGETHER IN ONE PLACE FOR BALANCING CONVENIENCE + +# SEASONS +# +## ABUNDANT GRAZING (GOOD) + +cf_abundant_grazing_growth_add_value = 2.0 +cf_abundant_grazing_growth_mult_value = 0.25 + +## SEVERE DROUGHT (BAD) + +cf_severe_drought_decline_add_value = -0.5 +cf_severe_drought_decline_mult_value = 0.2 +cf_severe_drought_growth_mult_value = -0.2 + +## WHITE ZUD (BAD-BAD) + +cf_white_zud_decline_add_value = -2 +cf_white_zud_decline_mult_value = 0.8 +cf_white_zud_growth_mult_value = -0.8 + +## COLD ZUD ( BAD ) + +cf_cold_zud_decline_add_value = -1 +cf_cold_zud_decline_mult_value = 0.4 +cf_cold_zud_growth_mult_value = -0.4 + +## EVERLASTING SUMMER ( GOOD-GOOD ) + +cf_warm_nights_growth_add_value = 2.0 +cf_warm_nights_growth_mult_value = 0.75 + +## BLESSING OF THE BLUE SKY ( BLISS ) + +cf_sky_blessing_growth_add_value = 8 +cf_sky_blessing_growth_mult_value = 3 + +# HAVSARSAN ( EVERYBODY WILL PERISH ) + +cf_havsarsan_decline_add_value = 4 +cf_havsarsan_decline_mult_value = 1 +cf_havsarsan_growth_mult_value = -3 + +# TERRAIN (only growth add) +# NOTE: these are added per province in the county, so be mindful with the values + +steppe_county_fertility_value = 0.35 +farmlands_county_fertility_value = 0.35 +oasis_county_fertility_value = 0.35 +plains_county_fertility_value = 0.25 +desert_county_fertility_value = 0.25 +drylands_county_fertility_value = 0.25 +hills_county_fertility_value = 0.2 +floodplains_county_fertility_value = 0.2 +wetlands_county_fertility_value = 0.2 +mountains_county_fertility_value = 0.15 +desert_mountains_county_fertility_value = 0.15 +forest_county_fertility_value = 0.15 +taiga_county_fertility_value = 0.15 +jungle_county_fertility_value = 0.05 + +# TERRAIN CULTURE MODIFIERS + +high_culture_county_fertility_value_add = 0.4 +medium_culture_county_fertility_value_add = 0.1 +low_culture_county_fertility_value_add = 0.05 + +high_culture_county_fertility_value_mult = 0.2 +medium_culture_county_fertility_value_mult = 0.1 +low_culture_county_fertility_value_mult = 0.05 + + +# EVENT ETC MODIFIERS + +massive_county_fertility_value_positive_add = 8 +major_county_fertility_value_positive_add = 6 +medium_county_fertility_value_positive_add = 4 +minor_county_fertility_value_positive_add = 2 + +massive_county_fertility_value_positive_mult = 1 +major_county_fertility_value_positive_mult = 0.6 +medium_county_fertility_value_positive_mult = 0.4 +minor_county_fertility_value_positive_mult = 0.2 + +massive_county_fertility_value_negative_add = -6 +major_county_fertility_value_negative_add = -4 +medium_county_fertility_value_negative_add = -2 +minor_county_fertility_value_negative_add = -1 + +massive_county_fertility_value_negative_mult = -0.8 +major_county_fertility_value_negative_mult = -0.6 +medium_county_fertility_value_negative_mult = -0.2 +minor_county_fertility_value_negative_mult = -0.1 + + diff --git a/common/script_values/00_court_amenities_values.txt b/common/script_values/00_court_amenities_values.txt index 6b9d7c5e..d275c80c 100644 --- a/common/script_values/00_court_amenities_values.txt +++ b/common/script_values/00_court_amenities_values.txt @@ -51,6 +51,20 @@ base_court_amenities_cost = { value = 1.25 } } + if = { + limit = { + has_game_rule = hard_difficulty + is_ai = yes + } + multiply = 0.75 + } + else_if = { + limit = { + has_game_rule = very_hard_difficulty + is_ai = yes + } + multiply = 0.5 + } } court_amenities_cost_level_1 = { diff --git a/common/script_values/00_court_position_values.txt b/common/script_values/00_court_position_values.txt index b4f40a79..0d062444 100644 --- a/common/script_values/00_court_position_values.txt +++ b/common/script_values/00_court_position_values.txt @@ -3,9 +3,9 @@ # MINOR TITLE COSTS ############################ -minor_court_position_salary = { +tiny_court_position_salary = { add = { - value = 0.25 + value = 0.05 desc = COURT_POSITION_SALARY_BREAKDOWN_BASE format = "BASE_VALUE_FORMAT_DECIMALS" } @@ -115,6 +115,18 @@ minor_court_position_salary = { format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" } } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_nomadic + } + } + multiply = { + value = 0.5 + desc = nomad_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } if = { limit = { scope:liege = { @@ -129,8 +141,323 @@ minor_court_position_salary = { format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" } } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } +} + +minor_court_position_salary = { + add = { + value = 0.12 + desc = COURT_POSITION_SALARY_BREAKDOWN_BASE + format = "BASE_VALUE_FORMAT_DECIMALS" + } + if = { + limit = { + scope:liege.sub_realm_size >= 120 + } + multiply = { + value = 1.6 + desc = enormous_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 90 + } + multiply = { + value = 1.4 + desc = large_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 60 + } + multiply = { + value = 1.2 + desc = medium_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 30 + } + multiply = { + value = 1.1 + desc = small_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_late_medieval + } + } + } + multiply = { + value = 1.75 + desc = culture_era_late_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_high_medieval + } + } + } + multiply = { + value = 1.5 + desc = culture_era_high_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_early_medieval + } + } + } + multiply = { + value = 1.25 + desc = culture_era_early_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + highest_held_title_tier >= tier_empire + } + } + multiply = { + value = 1.25 + desc = empire_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_tribal + } + } + multiply = { + value = 0.25 + desc = tribal_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_nomadic + } + } + multiply = { + value = 0.5 + desc = nomad_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_parameter = cheaper_court_positions + } + } + } + multiply = { + value = 0.8 + desc = esteemed_hospitality_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } } medium_court_position_salary = { + add = { + value = 0.25 + desc = COURT_POSITION_SALARY_BREAKDOWN_BASE + format = "BASE_VALUE_FORMAT_DECIMALS" + } + if = { + limit = { + scope:liege.sub_realm_size >= 120 + } + multiply = { + value = 1.6 + desc = enormous_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 90 + } + multiply = { + value = 1.4 + desc = large_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 60 + } + multiply = { + value = 1.2 + desc = medium_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 30 + } + multiply = { + value = 1.1 + desc = small_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_late_medieval + } + } + } + multiply = { + value = 1.75 + desc = culture_era_late_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_high_medieval + } + } + } + multiply = { + value = 1.5 + desc = culture_era_high_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_early_medieval + } + } + } + multiply = { + value = 1.25 + desc = culture_era_early_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + highest_held_title_tier >= tier_empire + } + } + multiply = { + value = 1.25 + desc = empire_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_tribal + } + } + multiply = { + value = 0.25 + desc = tribal_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_nomadic + } + } + multiply = { + value = 0.5 + desc = nomad_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_parameter = cheaper_court_positions + } + } + } + multiply = { + value = 0.8 + desc = esteemed_hospitality_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } +} +major_court_position_salary = { add = { value = 0.5 desc = COURT_POSITION_SALARY_BREAKDOWN_BASE @@ -245,127 +572,12 @@ medium_court_position_salary = { if = { limit = { scope:liege = { - culture = { - has_cultural_parameter = cheaper_court_positions - } + government_has_flag = government_is_nomadic } } multiply = { - value = 0.8 - desc = esteemed_hospitality_salary_mod - format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" - } - } -} -major_court_position_salary = { - add = { - value = 1.0 - desc = COURT_POSITION_SALARY_BREAKDOWN_BASE - format = "BASE_VALUE_FORMAT_DECIMALS" - } - if = { - limit = { - scope:liege.sub_realm_size >= 120 - } - multiply = { - value = 1.6 - desc = enormous_realm_salary_mod - format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" - } - } - else_if = { - limit = { - scope:liege.sub_realm_size >= 90 - } - multiply = { - value = 1.4 - desc = large_realm_salary_mod - format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" - } - } - else_if = { - limit = { - scope:liege.sub_realm_size >= 60 - } - multiply = { - value = 1.2 - desc = medium_realm_salary_mod - format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" - } - } - else_if = { - limit = { - scope:liege.sub_realm_size >= 30 - } - multiply = { - value = 1.1 - desc = small_realm_salary_mod - format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" - } - } - if = { - limit = { - scope:liege = { - culture = { - has_cultural_era_or_later = culture_era_late_medieval - } - } - } - multiply = { - value = 1.75 - desc = culture_era_late_medieval_salary_mod - format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" - } - } - else_if = { - limit = { - scope:liege = { - culture = { - has_cultural_era_or_later = culture_era_high_medieval - } - } - } - multiply = { - value = 1.5 - desc = culture_era_high_medieval_salary_mod - format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" - } - } - else_if = { - limit = { - scope:liege = { - culture = { - has_cultural_era_or_later = culture_era_early_medieval - } - } - } - multiply = { - value = 1.25 - desc = culture_era_early_medieval_salary_mod - format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" - } - } - if = { - limit = { - scope:liege = { - highest_held_title_tier >= tier_empire - } - } - multiply = { - value = 1.25 - desc = empire_salary_mod - format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" - } - } - if = { - limit = { - scope:liege = { - government_has_flag = government_is_tribal - } - } - multiply = { - value = 0.25 - desc = tribal_salary_mod + value = 0.5 + desc = nomad_salary_mod format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" } } @@ -383,6 +595,18 @@ major_court_position_salary = { format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" } } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } } court_position_physician_salary = { @@ -466,6 +690,18 @@ court_position_physician_salary = { } } } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } } court_position_antiquarian_salary = { @@ -594,6 +830,18 @@ court_position_antiquarian_salary = { format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" } } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } } court_position_travel_leader_salary = { @@ -617,17 +865,929 @@ court_position_travel_leader_salary = { format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" } } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } } minor_court_position_task_prestige_salary = 0.2 -minor_court_position_prestige_salary = 0.5 -medium_court_position_prestige_salary = 1.0 -major_court_position_prestige_salary = 2.0 +minor_court_position_prestige_salary = { + add = { + value = 0.1 + desc = COURT_POSITION_SALARY_BREAKDOWN_BASE + format = "BASE_VALUE_FORMAT_DECIMALS" + } + if = { + limit = { + scope:liege.sub_realm_size >= 120 + } + multiply = { + value = 1.6 + desc = enormous_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 90 + } + multiply = { + value = 1.4 + desc = large_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 60 + } + multiply = { + value = 1.2 + desc = medium_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 30 + } + multiply = { + value = 1.1 + desc = small_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_late_medieval + } + } + } + multiply = { + value = 1.75 + desc = culture_era_late_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_high_medieval + } + } + } + multiply = { + value = 1.5 + desc = culture_era_high_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_early_medieval + } + } + } + multiply = { + value = 1.25 + desc = culture_era_early_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + highest_held_title_tier >= tier_empire + } + } + multiply = { + value = 1.25 + desc = empire_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_tribal + } + } + multiply = { + value = 0.25 + desc = tribal_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_nomadic + } + } + multiply = { + value = 0.5 + desc = nomad_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_parameter = cheaper_court_positions + } + } + } + multiply = { + value = 0.8 + desc = esteemed_hospitality_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } +} +medium_court_position_prestige_salary = { + add = { + value = 0.2 + desc = COURT_POSITION_SALARY_BREAKDOWN_BASE + format = "BASE_VALUE_FORMAT_DECIMALS" + } + if = { + limit = { + scope:liege.sub_realm_size >= 120 + } + multiply = { + value = 1.6 + desc = enormous_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 90 + } + multiply = { + value = 1.4 + desc = large_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 60 + } + multiply = { + value = 1.2 + desc = medium_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 30 + } + multiply = { + value = 1.1 + desc = small_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_late_medieval + } + } + } + multiply = { + value = 1.75 + desc = culture_era_late_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_high_medieval + } + } + } + multiply = { + value = 1.5 + desc = culture_era_high_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_early_medieval + } + } + } + multiply = { + value = 1.25 + desc = culture_era_early_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + highest_held_title_tier >= tier_empire + } + } + multiply = { + value = 1.25 + desc = empire_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_tribal + } + } + multiply = { + value = 0.25 + desc = tribal_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_nomadic + } + } + multiply = { + value = 0.5 + desc = nomad_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_parameter = cheaper_court_positions + } + } + } + multiply = { + value = 0.8 + desc = esteemed_hospitality_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } +} +major_court_position_prestige_salary = { + add = { + value = 0.3 + desc = COURT_POSITION_SALARY_BREAKDOWN_BASE + format = "BASE_VALUE_FORMAT_DECIMALS" + } + if = { + limit = { + scope:liege.sub_realm_size >= 120 + } + multiply = { + value = 1.6 + desc = enormous_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 90 + } + multiply = { + value = 1.4 + desc = large_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 60 + } + multiply = { + value = 1.2 + desc = medium_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 30 + } + multiply = { + value = 1.1 + desc = small_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_late_medieval + } + } + } + multiply = { + value = 1.75 + desc = culture_era_late_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_high_medieval + } + } + } + multiply = { + value = 1.5 + desc = culture_era_high_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_early_medieval + } + } + } + multiply = { + value = 1.25 + desc = culture_era_early_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + highest_held_title_tier >= tier_empire + } + } + multiply = { + value = 1.25 + desc = empire_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_tribal + } + } + multiply = { + value = 0.25 + desc = tribal_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_nomadic + } + } + multiply = { + value = 0.5 + desc = nomad_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_parameter = cheaper_court_positions + } + } + } + multiply = { + value = 0.8 + desc = esteemed_hospitality_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } +} -minor_court_position_piety_salary = 0.5 -medium_court_position_piety_salary = 1.0 -major_court_position_piety_salary = 2.0 +minor_court_position_piety_salary = { + add = { + value = 0.5 + desc = COURT_POSITION_SALARY_BREAKDOWN_BASE + format = "BASE_VALUE_FORMAT_DECIMALS" + } + if = { + limit = { + scope:liege.sub_realm_size >= 120 + } + multiply = { + value = 1.6 + desc = enormous_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 90 + } + multiply = { + value = 1.4 + desc = large_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 60 + } + multiply = { + value = 1.2 + desc = medium_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 30 + } + multiply = { + value = 1.1 + desc = small_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_late_medieval + } + } + } + multiply = { + value = 1.75 + desc = culture_era_late_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_high_medieval + } + } + } + multiply = { + value = 1.5 + desc = culture_era_high_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_early_medieval + } + } + } + multiply = { + value = 1.25 + desc = culture_era_early_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + highest_held_title_tier >= tier_empire + } + } + multiply = { + value = 1.25 + desc = empire_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_tribal + } + } + multiply = { + value = 0.25 + desc = tribal_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_nomadic + } + } + multiply = { + value = 0.5 + desc = nomad_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_parameter = cheaper_court_positions + } + } + } + multiply = { + value = 0.8 + desc = esteemed_hospitality_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } +} +medium_court_position_piety_salary = { + add = { + value = 1 + desc = COURT_POSITION_SALARY_BREAKDOWN_BASE + format = "BASE_VALUE_FORMAT_DECIMALS" + } + if = { + limit = { + scope:liege.sub_realm_size >= 120 + } + multiply = { + value = 1.6 + desc = enormous_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 90 + } + multiply = { + value = 1.4 + desc = large_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 60 + } + multiply = { + value = 1.2 + desc = medium_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 30 + } + multiply = { + value = 1.1 + desc = small_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_late_medieval + } + } + } + multiply = { + value = 1.75 + desc = culture_era_late_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_high_medieval + } + } + } + multiply = { + value = 1.5 + desc = culture_era_high_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_early_medieval + } + } + } + multiply = { + value = 1.25 + desc = culture_era_early_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + highest_held_title_tier >= tier_empire + } + } + multiply = { + value = 1.25 + desc = empire_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_tribal + } + } + multiply = { + value = 0.25 + desc = tribal_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_nomadic + } + } + multiply = { + value = 0.5 + desc = nomad_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_parameter = cheaper_court_positions + } + } + } + multiply = { + value = 0.8 + desc = esteemed_hospitality_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } +} +major_court_position_piety_salary = { + add = { + value = 2 + desc = COURT_POSITION_SALARY_BREAKDOWN_BASE + format = "BASE_VALUE_FORMAT_DECIMALS" + } + if = { + limit = { + scope:liege.sub_realm_size >= 120 + } + multiply = { + value = 1.6 + desc = enormous_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 90 + } + multiply = { + value = 1.4 + desc = large_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 60 + } + multiply = { + value = 1.2 + desc = medium_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.sub_realm_size >= 30 + } + multiply = { + value = 1.1 + desc = small_realm_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_late_medieval + } + } + } + multiply = { + value = 1.75 + desc = culture_era_late_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_high_medieval + } + } + } + multiply = { + value = 1.5 + desc = culture_era_high_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege = { + culture = { + has_cultural_era_or_later = culture_era_early_medieval + } + } + } + multiply = { + value = 1.25 + desc = culture_era_early_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + highest_held_title_tier >= tier_empire + } + } + multiply = { + value = 1.25 + desc = empire_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_tribal + } + } + multiply = { + value = 0.25 + desc = tribal_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + government_has_flag = government_is_nomadic + } + } + multiply = { + value = 0.5 + desc = nomad_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + scope:liege = { + culture = { + has_cultural_parameter = cheaper_court_positions + } + } + } + multiply = { + value = 0.8 + desc = esteemed_hospitality_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_MINUS_POSITIVE" + } + } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 + } +} minor_court_position_prestige_cost = -0.2 @@ -752,3 +1912,893 @@ adjust_court_position_score_for_unity = { add = 25 } } + +######################## +# COURT POSITION TASKS # +######################## + +seneschal_improve_court_value = { + value = 0 + if = { + limit = { + aptitude = { + court_position = seneschal_court_position + value = 4 + } + } + value = 10 + } + else_if = { + limit = { + aptitude = { + court_position = seneschal_court_position + value = 3 + } + } + value = 7 + } + else_if = { + limit = { + aptitude = { + court_position = seneschal_court_position + value = 2 + } + } + value = 5 + } + else_if = { + limit = { + aptitude = { + court_position = seneschal_court_position + value = 1 + } + } + value = 3 + } + else_if = { + limit = { + aptitude = { + court_position = seneschal_court_position + value = 0 + } + } + value = 2 + } +} + +yeke_jarquchi_improve_court_value = { + value = 0 + if = { + limit = { + aptitude = { + court_position = yeke_jarquchi_court_position + value = 4 + } + } + value = 10 + } + else_if = { + limit = { + aptitude = { + court_position = yeke_jarquchi_court_position + value = 3 + } + } + value = 7 + } + else_if = { + limit = { + aptitude = { + court_position = yeke_jarquchi_court_position + value = 2 + } + } + value = 5 + } + else_if = { + limit = { + aptitude = { + court_position = yeke_jarquchi_court_position + value = 1 + } + } + value = 3 + } + else_if = { + limit = { + aptitude = { + court_position = yeke_jarquchi_court_position + value = 0 + } + } + value = 2 + } +} + +caravan_master_prepare_travels_max_value = { + value = 3 + if = { + limit = { + aptitude = { + court_position = travel_leader_court_position + value = 4 + } + } + value = 20 + } + else_if = { + limit = { + aptitude = { + court_position = travel_leader_court_position + value = 3 + } + } + value = 15 + } + else_if = { + limit = { + aptitude = { + court_position = travel_leader_court_position + value = 2 + } + } + value = 10 + } + else_if = { + limit = { + aptitude = { + court_position = travel_leader_court_position + value = 1 + } + } + value = 6 + } +} + +caravan_master_prepare_travels_change_value = { + value = caravan_master_prepare_travels_max_value + divide = 10 +} + +caravan_master_prepare_travels_current_value = { + value = 0 + liege_or_court_owner ?= { + if = { + limit = { + has_variable = prepare_travels_value + } + value = var:prepare_travels_value + } + } +} + +caravan_master_prepare_travels_current_value_employer = { + value = 0 + scope:liege = { + if = { + limit = { + has_variable = prepare_travels_value + } + value = var:prepare_travels_value + } + } +} + +prepare_travels_modifier_value = { + value = 0 + if = { + limit = { + has_variable = prepare_travels_modifier_value + } + value = var:prepare_travels_modifier_value + } + + desc = MODIFIER_DEFINITION_PREPARE_TRAVELS_VALUE +} + +# Aptitude Values +kurultai_task_value = { + if = { + limit = { + OR = { + employer.cp:councillor_kurultai_1 ?= { is_performing_council_task = task_kurultai_court_astrologer_1 } + employer.cp:councillor_kurultai_2 ?= { is_performing_council_task = task_kurultai_court_astrologer_2 } + employer.cp:councillor_kurultai_3 ?= { is_performing_council_task = task_kurultai_court_astrologer_3 } + employer.cp:councillor_kurultai_4 ?= { is_performing_council_task = task_kurultai_court_astrologer_4 } + } + } + add = { + if = { + limit = { + employer.cp:councillor_kurultai_1 ?= { is_performing_council_task = task_kurultai_court_astrologer_1 } + } + add = employer.cp:councillor_kurultai_1.kurultai_court_astrologer_aptitude_final_value + } + if = { + limit = { + employer.cp:councillor_kurultai_2 ?= { is_performing_council_task = task_kurultai_court_astrologer_2 } + } + add = employer.cp:councillor_kurultai_2.kurultai_court_astrologer_aptitude_final_value + } + if = { + limit = { + employer.cp:councillor_kurultai_3 ?= { is_performing_council_task = task_kurultai_court_astrologer_3 } + } + add = employer.cp:councillor_kurultai_3.kurultai_court_astrologer_aptitude_final_value + } + if = { + limit = { + employer.cp:councillor_kurultai_4 ?= { is_performing_council_task = task_kurultai_court_astrologer_4 } + } + add = employer.cp:councillor_kurultai_4.kurultai_court_astrologer_aptitude_final_value + } + desc = task_kurultai_court_astrologer_modifier + } + } +} + +aptitude_commander_trait_value = { + add = aptitude_logistician_value + add = aptitude_military_engineer_value + add = aptitude_aggressive_attacker_value + add = aptitude_unyielding_defender_value + add = aptitude_forder_value + add = aptitude_flexible_leader_value + add = aptitude_desert_warrior_value + add = aptitude_jungle_stalker_value + add = aptitude_reaver_value + add = aptitude_reckless_value + add = aptitude_holy_warrior_value + add = aptitude_open_terrain_expert_value + add = aptitude_rough_terrain_expert_value + add = aptitude_forest_fighter_value + add = aptitude_cautious_leader_value + add = aptitude_organizer_value + add = aptitude_winter_soldier_value +} + +aptitude_logistician_value = { + value = 0 + if = { + limit = { + has_trait = logistician + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = logistician + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = logistician + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = logistician + value >= 33 + } + } + add = 5 + } + } + desc = court_position_logistician_trait +} + +aptitude_military_engineer_value = { + value = 0 + if = { + limit = { + has_trait = military_engineer + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = military_engineer + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = military_engineer + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = military_engineer + value >= 33 + } + } + add = 5 + } + } + desc = court_position_military_engineer_trait +} + +aptitude_aggressive_attacker_value = { + value = 0 + if = { + limit = { + has_trait = aggressive_attacker + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = aggressive_attacker + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = aggressive_attacker + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = aggressive_attacker + value >= 33 + } + } + add = 5 + } + } + desc = court_position_aggressive_attacker_trait +} + +aptitude_unyielding_defender_value = { + value = 0 + if = { + limit = { + has_trait = unyielding_defender + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = unyielding_defender + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = unyielding_defender + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = unyielding_defender + value >= 33 + } + } + add = 5 + } + } + desc = court_position_unyielding_defender_trait +} + +aptitude_forder_value = { + value = 0 + if = { + limit = { + has_trait = forder + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = forder + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = forder + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = forder + value >= 33 + } + } + add = 5 + } + } + desc = court_position_forder_trait +} + +aptitude_flexible_leader_value = { + value = 0 + if = { + limit = { + has_trait = flexible_leader + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = flexible_leader + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = flexible_leader + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = flexible_leader + value >= 33 + } + } + add = 5 + } + } + desc = court_position_flexible_leader_trait +} + +aptitude_desert_warrior_value = { + value = 0 + if = { + limit = { + has_trait = desert_warrior + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = desert_warrior + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = desert_warrior + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = desert_warrior + value >= 33 + } + } + add = 5 + } + } + desc = court_position_desert_warrior_trait +} + +aptitude_jungle_stalker_value = { + value = 0 + if = { + limit = { + has_trait = jungle_stalker + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = jungle_stalker + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = jungle_stalker + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = jungle_stalker + value >= 33 + } + } + add = 5 + } + } + desc = court_position_jungle_stalker_trait +} + +aptitude_reaver_value = { + value = 0 + if = { + limit = { + has_trait = reaver + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = reaver + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = reaver + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = reaver + value >= 33 + } + } + add = 5 + } + } + desc = court_position_reaver_trait +} + +aptitude_reckless_value = { + value = 0 + if = { + limit = { + has_trait = reckless + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = reckless + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = reckless + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = reckless + value >= 33 + } + } + add = 5 + } + } + desc = court_position_reckless_trait +} + +aptitude_holy_warrior_value = { + value = 0 + if = { + limit = { + has_trait = holy_warrior + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = holy_warrior + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = holy_warrior + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = holy_warrior + value >= 33 + } + } + add = 5 + } + } + desc = court_position_holy_warrior_trait +} + +aptitude_open_terrain_expert_value = { + value = 0 + if = { + limit = { + has_trait = open_terrain_expert + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = open_terrain_expert + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = open_terrain_expert + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = open_terrain_expert + value >= 33 + } + } + add = 5 + } + } + desc = court_position_open_terrain_expert_trait +} + +aptitude_rough_terrain_expert_value = { + value = 0 + if = { + limit = { + has_trait = rough_terrain_expert + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = rough_terrain_expert + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = rough_terrain_expert + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = rough_terrain_expert + value >= 33 + } + } + add = 5 + } + } + desc = court_position_rough_terrain_expert_trait +} + +aptitude_forest_fighter_value = { + value = 0 + if = { + limit = { + has_trait = forest_fighter + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = forest_fighter + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = forest_fighter + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = forest_fighter + value >= 33 + } + } + add = 5 + } + } + desc = court_position_forest_fighter_trait +} + +aptitude_cautious_leader_value = { + value = 0 + if = { + limit = { + has_trait = cautious_leader + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = cautious_leader + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = cautious_leader + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = cautious_leader + value >= 33 + } + } + add = 5 + } + } + desc = court_position_cautious_leader_trait +} + +aptitude_organizer_value = { + value = 0 + if = { + limit = { + has_trait = organizer + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = organizer + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = organizer + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = organizer + value >= 33 + } + } + add = 5 + } + } + desc = court_position_organizer_trait +} + +aptitude_winter_soldier_value = { + value = 0 + if = { + limit = { + has_trait = winter_soldier + } + add = 10 + if = { + limit = { + has_trait_xp = { + trait = winter_soldier + value >= 100 + } + } + add = 15 + } + else_if = { + limit = { + has_trait_xp = { + trait = winter_soldier + value >= 66 + } + } + add = 10 + } + else_if = { + limit = { + has_trait_xp = { + trait = winter_soldier + value >= 33 + } + } + add = 5 + } + } + desc = court_position_winter_soldier_trait +} diff --git a/common/script_values/00_culture_values.txt b/common/script_values/00_culture_values.txt index 2eaf251d..10923189 100644 --- a/common/script_values/00_culture_values.txt +++ b/common/script_values/00_culture_values.txt @@ -166,6 +166,17 @@ hybridization_threshold_value = { } multiply = 0.5 } + else_if = { + limit = { + root = { + has_trait = nomadic_philosophy + NOT = { + government_has_flag = government_is_nomadic + } + } + } + multiply = 0.5 + } if = { limit = { root.culture = { @@ -214,6 +225,19 @@ hybridization_threshold_value = { } multiply = 0.75 } + # Council Position + if = { + limit = { + root = { + has_variable = kurultai_culture_variable_value + } + } + multiply = { + value = 100 + subtract = root.var:kurultai_culture_variable_value + divide = 100 + } + } max = 100 min = 0 } @@ -268,15 +292,75 @@ culture_hybrid_cooldown = { multiply = 0 } } -add_tradition_cooldown = 50 -tradition_base_cost = 2000 +add_tradition_cooldown = { + value = 50 + if = { + limit = { + culture_head ?= { + has_variable = kurultai_culture_variable_value + } + } + multiply = { + value = 100 + subtract = culture_head.var:kurultai_culture_variable_value + divide = 100 + } + } +} + +tradition_base_cost = { + value = 2000 + if = { + limit = { + culture_head ?= { + has_variable = kurultai_culture_variable_value + } + } + multiply = { + value = 100 + subtract = culture_head.var:kurultai_culture_variable_value + divide = 100 + } + } +} + tradition_double_base_cost = { value = tradition_base_cost multiply = 2 } -tradition_incompatible_ethos_penalty = 2000 -tradition_unfulfilled_criteria_penalty = 3000 +tradition_incompatible_ethos_penalty = { + value = 2000 + if = { + limit = { + culture_head ?= { + has_variable = kurultai_culture_variable_value + } + } + multiply = { + value = 100 + subtract = culture_head.var:kurultai_culture_variable_value + divide = 100 + } + } +} + +tradition_unfulfilled_criteria_penalty = { + value = 3000 + if = { + limit = { + culture_head ?= { + has_variable = kurultai_culture_variable_value + } + } + multiply = { + value = 100 + subtract = culture_head.var:kurultai_culture_variable_value + divide = 100 + } + } +} + tradition_replacement_cost_factor = 1.5 tradition_replacement_cost_factor_tooltip = { value = tradition_replacement_cost_factor @@ -471,6 +555,13 @@ language_soft_cap = { } add = 1 } + if = { + limit = { + government_has_flag = government_is_nomadic + domicile ?= { has_domicile_parameter = nomad_yurt_language_cap } + } + add = 1 + } if = { limit = { exists = dynasty diff --git a/common/script_values/00_diarchy_values.txt b/common/script_values/00_diarchy_values.txt index a9f99950..e943fd63 100644 --- a/common/script_values/00_diarchy_values.txt +++ b/common/script_values/00_diarchy_values.txt @@ -122,6 +122,16 @@ diarch_loyalty_score_type_regency_value = { } } } + # Obedience matters if you have obedience + if = { + limit = { + liege = { government_allows = obedience } + } + add = { + desc = game_concept_obedience + value = obedience_value + } + } # Overrides. ## Loyalty overrides. add = diarch_loyalty_score_standard_values_overrides_loyalty_value @@ -1385,7 +1395,12 @@ diarchy_regent_succession_score_value = { ### Prowess. if = { limit = { - liege = { has_court_type = court_tribal } + liege = { + OR = { + has_court_type = court_tribal + has_court_type = court_nomadic + } + } } add = { value = prowess @@ -2225,7 +2240,12 @@ diarchy_vizier_succession_score_value = { ### Prowess. if = { limit = { - liege = { has_court_type = court_tribal } + liege = { + OR = { + has_court_type = court_tribal + has_court_type = court_nomadic + } + } } add = { value = prowess diff --git a/common/script_values/00_dlc_fp3_script_values.txt b/common/script_values/00_dlc_fp3_script_values.txt index efae91e3..fd944db7 100644 --- a/common/script_values/00_dlc_fp3_script_values.txt +++ b/common/script_values/00_dlc_fp3_script_values.txt @@ -366,8 +366,7 @@ tax_collector_aptitude_major_increase = { value = 20 } tax_collector_aptitude_massive_increase = { value = 25 } - -tax_collector_aptitude_score = { +base_tax_collector_aptitude_score = { value = 1 add = { value = diplomacy @@ -498,15 +497,29 @@ tax_collector_aptitude_score = { desc = traditions_cheaper_value } } + + if = { + limit = { + is_landed = yes + } + add = { + value = -10 + desc = court_position_landed_penalty + } + } # Flag Check (for debug/event usage) - Use debug.9610 if = { limit = { has_character_flag = is_guaranteed_excellent_tax_collector } - add = 110 + add = 130 } add = court_position_aptitude_family_business_value add = court_position_aptitude_eunuch_tradition_value +} + +tax_collector_aptitude_score = { + value = base_tax_collector_aptitude_score # Viziers if = { @@ -533,7 +546,7 @@ tax_collector_aptitude_score = { } add = { value = { - value = liege.diarch.tax_collector_aptitude_score + value = liege.diarch.base_tax_collector_aptitude_score # But remove the buff the vizier got from the SoP swing or things'll get ridiculous. subtract = diarch_aptitude_helps_tax_collectors_buffed_by_swing_value # Now, reduce according to the correct percentage. @@ -551,7 +564,7 @@ tax_collector_aptitude_score = { } add = { value = { - value = liege.diarch.tax_collector_aptitude_score + value = liege.diarch.base_tax_collector_aptitude_score # But remove the buff the vizier got from the SoP swing or things'll get ridiculous. subtract = diarch_aptitude_helps_tax_collectors_buffed_by_swing_value # Now, reduce according to the correct percentage. @@ -569,7 +582,7 @@ tax_collector_aptitude_score = { } add = { value = { - value = liege.diarch.tax_collector_aptitude_score + value = liege.diarch.base_tax_collector_aptitude_score # But remove the buff the vizier got from the SoP swing or things'll get ridiculous. subtract = diarch_aptitude_helps_tax_collectors_buffed_by_swing_value # Now, reduce according to the correct percentage. @@ -587,7 +600,7 @@ tax_collector_aptitude_score = { } add = { value = { - value = liege.diarch.tax_collector_aptitude_score + value = liege.diarch.base_tax_collector_aptitude_score # But remove the buff the vizier got from the SoP swing or things'll get ridiculous. subtract = diarch_aptitude_helps_tax_collectors_buffed_by_swing_value # Now, reduce according to the correct percentage. @@ -979,6 +992,10 @@ fp3_request_invasion_troop_value_bonus_levy_troops = { multiply = 100 } +fp3_request_invasion_troop_value_bonus_levy_nomads = { + value = fp3_request_invasion_troop_value_bonus_troops +} + # The cost in gold of sponsoring a new research project diff --git a/common/script_values/00_faction_values.txt b/common/script_values/00_faction_values.txt index 82f15db4..641152a1 100644 --- a/common/script_values/00_faction_values.txt +++ b/common/script_values/00_faction_values.txt @@ -103,6 +103,36 @@ county_levies_to_raise = { } } +county_horde_riders_to_raise = { + if = { + limit = { + uses_county_fertility = yes + } + value = county_fertility + } + else = { + value = 25 + } + min = 10 + multiply = 30 + + # Will summon between 75% and 175% of total county levy strength, depending on how much they hate you (most commonly will be 95-110% though, scores between -20 and -35 are the most common) + multiply = { + value = county_opinion + multiply = -0.01 + add = 0.5 + } + min = { + value = building_max_garrison + multiply = 1.2 + } +} + +county_horde_riders_to_raise_power = { + value = county_horde_riders_to_raise + multiply = 2 +} + county_maa_to_raise = { value = total_county_levies diff --git a/common/script_values/00_goverment_values.txt b/common/script_values/00_goverment_values.txt index b2775aa5..4b1f5b80 100644 --- a/common/script_values/00_goverment_values.txt +++ b/common/script_values/00_goverment_values.txt @@ -153,7 +153,7 @@ war_declaration_rights_allowed_cost_reduction_tooltip = { value = war_declaration_rights_allowed_cost_reduction multiply = 100 } -max_contract_changes = 3 +max_contract_changes = 4 family_entrepreneurship_tax = 1 family_entrepreneurship_tax_tooltip = { @@ -180,6 +180,31 @@ ghazi_prestige_cost_increments_tooltip = { multiply = 100 } +#Nomadic government values +exempt_herd_tax = 0 +low_herd_tax = 0.05 +normal_herd_tax = 0.1 +high_herd_tax = 0.25 +extortionate_herd_tax = 0.4 + +herd_tax_exempt_level = 0 +herd_tax_low_level = 1 +herd_tax_normal_level = 2 +herd_tax_high_level = 3 +herd_tax_extortionate_level = 4 + +exempt_nomad_tax = 0 +low_nomad_tax = 0.05 +normal_nomad_tax = 0.1 +high_nomad_tax = 0.15 +extortionate_nomad_tax = 0.2 + +# Default Tributary values +normal_tributary_tax = 0.25 +high_tributary_tax = 0.50 +normal_prestige_transfer = 0.1 +high_prestige_transfer = 0.25 + #maguh_development_value = { # value = 0.01 # multiply = clan_government_tax_collector_aptitude_multiplier diff --git a/common/script_values/00_interaction_values.txt b/common/script_values/00_interaction_values.txt index 65546007..45a364b9 100644 --- a/common/script_values/00_interaction_values.txt +++ b/common/script_values/00_interaction_values.txt @@ -23,6 +23,26 @@ golden_obligation_value_check_current_situation = { max = golden_obligation_value } +ransom_herd_value_recipient = { + value = 0 + if = { + limit = { + exists = scope:recipient.domicile + } + add = scope:recipient.domicile.medium_herd_value + } +} + +ransom_herd_value_actor = { + value = 0 + if = { + limit = { + exists = scope:actor.domicile + } + add = scope:actor.domicile.medium_herd_value + } +} + ransom_cost_value = { value = ransom_cost # Some cultures are better at ransoming than others. @@ -122,6 +142,34 @@ ransom_cost_value = { add = 1 } } + if = { + limit = { + has_game_rule = hard_difficulty + OR = { + scope:imprisoner ?= { + is_ai = no + } + imprisoner ?= { + is_ai = no + } + } + } + multiply = 0.5 + } + else_if = { + limit = { + has_game_rule = very_hard_difficulty + OR = { + scope:imprisoner ?= { + is_ai = no + } + imprisoner ?= { + is_ai = no + } + } + } + multiply = 0.25 + } } current_situation_gold_ransom = { @@ -482,6 +530,27 @@ number_of_minority_vassals = { } } +number_of_belligerent_vassals = { + value = 0 + every_vassal = { + limit = { + has_vassal_stance = belligerent + } + add = 1 + } +} + +number_of_participating_belligerent_vassals = { + value = 0 + every_vassal = { + limit = { + has_vassal_stance = belligerent + is_participant_in_activity = root.involved_activity + } + add = 1 + } +} + number_of_barons_and_minor_landholders_vassals = { value = 0 every_vassal = { @@ -699,6 +768,13 @@ fifty_percent_of_current_military_strength = { } } +ten_percent_of_current_military_strength = { + value = { + add = current_military_strength + multiply = 0.1 + } +} + eighty_percent_of_max_military_strength = { value = { add = max_military_strength @@ -807,3 +883,36 @@ elope_close_family_tiers_acceptance_value = { multiply = 25 } +duchy_confederation_vassals_value = { + value = 0 + scope:actor.confederation = { + every_confederation_member = { + limit = { + highest_held_title_tier >= tier_county + } + add = -1 + } + } + #First 3 confederates are free + add = 3 + #Multiply by 20 to get impact + max = 0 + multiply = 15 +} + +duchy_confederation_vassals_value_recipient = { + value = 0 + scope:recipient.confederation = { + every_confederation_member = { + limit = { + highest_held_title_tier >= tier_county + } + add = -1 + } + } + #First 5 confederates are free + add = 5 + #Multiply by 20 to get impact + max = 0 + multiply = 15 +} diff --git a/common/script_values/00_law_values.txt b/common/script_values/00_law_values.txt index c3b76377..02997712 100644 --- a/common/script_values/00_law_values.txt +++ b/common/script_values/00_law_values.txt @@ -26,6 +26,15 @@ learning_law_cost_modifier = { min = -0.5 } +# Prowess: Base Dominance Cost Reduction +prowess_law_cost_modifier = { + value = 0 + subtract = prowess + add = 8 + divide = 75 + min = -0.5 +} + #Faith: The modifier used to calculate the Legalism modifier if the character's faith has Legalism legalism_law_cost_modifier = { value = 0 @@ -35,6 +44,15 @@ legalism_law_cost_modifier = { min = -0.3 } +#Faith: The modifier used to calculate the Warmonger modifier if the character's faith has Warmonger +warmonger_law_cost_modifier = { + value = 0 + add = num_sinful_traits + subtract = num_virtuous_traits + divide = 10 + min = -0.3 +} + #Faith: Religious Law religious_legal_pronouncements_modifier = -0.1 @@ -155,7 +173,10 @@ increase_crown_authority_prestige_cost = { # Apply All-Things cooldown breaker multiplier. if = { limit = { - has_variable = crown_authority_cooldown + OR = { + has_variable = crown_authority_cooldown + has_variable = imperial_bureaucracy_cooldown + } culture = { has_innovation = innovation_all_things } } # If the tally exists, multiply by that. @@ -319,6 +340,109 @@ increase_tribal_authority_prestige_cost = { } } +#Dominance / Nomadic Authority Change +increase_nomadic_authority_herd_cost_base = 500 + +increase_nomadic_authority_herd_cost = { + add = { + desc = "BASE_VALUE" + value = increase_nomadic_authority_herd_cost_base + format = "BASE_VALUE_FORMAT" + } + multiply = { + desc = "era_law_cost_scale" + value = domicile.herd_value_scale_by_era + } + multiply = { + desc = "dominance_law_cost_scale" + value = dominance_value + } +} + +increase_nomadic_authority_prestige_base = 300 + +increase_nomadic_authority_prestige_cost = { + add = { + desc = "BASE_VALUE" + value = increase_nomadic_authority_prestige_base + format = "BASE_VALUE_FORMAT" + } + # +10 Prestige cost per county controlled by you(r vassals) + add = { + desc = "realm_size" + format = "BREAKDOWN_FORMAT_REALM_SIZE_PRESTIGE_COST" + value = subrealm_size_modifier + } + + # Prowess Modifier (2% more expensive for each skill point below 8 Prowess) + if = { + limit = { + prowess < 8 + } + add = { + desc = "poor_prowess_law_cost_tooltip" + value = { + add = increase_nomadic_authority_prestige_base + add = subrealm_size_modifier + } + multiply = prowess_law_cost_modifier + } + } + else_if = { # (2% less expensive for each skill point above 8 Prowess) + limit = { + prowess > 8 + } + add = { + desc = "prowess_law_cost_tooltip" + value = { + add = increase_nomadic_authority_prestige_base + add = subrealm_size_modifier + } + multiply = prowess_law_cost_modifier + } + } + + # Tenet Modifiers + if = { + limit = { + faith = { + has_doctrine_parameter = warmonger + } + } + add = { + desc = "tenet_warmonger_law_cost_tooltip" + value = { + add = increase_crown_authority_prestige_base + add = subrealm_size_modifier + } + multiply = warmonger_law_cost_modifier + } + } + + # Apply All-Things cooldown breaker multiplier. + if = { + limit = { + has_variable = nomadic_authority_cooldown + culture = { has_innovation = innovation_all_things } + } + # If the tally exists, multiply by that. + if = { + limit = { has_variable = authority_cooldown_break_tally } + multiply = { + desc = "breaking_authority_cooldown" + value = var:authority_cooldown_break_tally + } + } + # Otherwise, multiply by the stock tally base. + else = { + multiply = { + desc = "breaking_authority_cooldown" + value = authority_cooldown_breaker_value + } + } + } +} + #Succession Law Change change_succession_law_prestige_base = 500 @title_succession_law_mult = 3 #How many times more expensive is it to add custom title succession than change your realm succession? diff --git a/common/script_values/00_legitimacy_values.txt b/common/script_values/00_legitimacy_values.txt index bbd390a6..366e893b 100644 --- a/common/script_values/00_legitimacy_values.txt +++ b/common/script_values/00_legitimacy_values.txt @@ -93,6 +93,7 @@ minor_legitimacy_gain = 50 medium_legitimacy_gain = 100 major_legitimacy_gain = 200 massive_legitimacy_gain = 300 +monumental_legitimacy_gain = 500 miniscule_legitimacy_loss = { value = 0 @@ -114,6 +115,10 @@ massive_legitimacy_loss = { value = 0 subtract = massive_legitimacy_gain } +monumental_legitimacy_loss = { + value = 0 + subtract = monumental_legitimacy_gain +} ### BASE CALCULATION VALUES @@ -187,7 +192,7 @@ base_legitimacy_value = { # Split into separate values for easy debugging/visibi # ADMINISTRATIVE if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } multiply = 0.75 # To reduce the overall base values add = base_legitimacy_admin_value # And add anything admin specific @@ -244,7 +249,7 @@ succession_legitimacy_value = { # Split into separate values for easy debugging/ # ADMINISTRATIVE if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } multiply = 0.75 # To reduce the overall base values add = base_legitimacy_admin_value # And add anything admin specific @@ -763,6 +768,13 @@ base_legitimacy_special_traits_value = { multiply = 2 } } + if = { + limit = { has_trait = golden_lineage } + add = { + value = base_legitimacy_per_special_traits_value + multiply = 2 + } + } if = { limit = { has_trait = born_in_the_purple } add = { @@ -1067,3 +1079,13 @@ legitimacy_regent_swing_scale_multipler_value = { multiply = 0.5 } } + +nomadic_legitimacy_claimant_multiplier = { + value = 1 + if = { + limit = { + scope:the_claimant = { government_has_flag = government_is_nomadic } + } + multiply = 1.5 + } +} diff --git a/common/script_values/00_lifestyle_values.txt b/common/script_values/00_lifestyle_values.txt index 9223d0b3..2999639e 100644 --- a/common/script_values/00_lifestyle_values.txt +++ b/common/script_values/00_lifestyle_values.txt @@ -10,6 +10,17 @@ major_lifestyle_xp = 300 massive_lifestyle_xp = 500 # Half of xp needed for 1 perk point monumental_lifestyle_xp = 1000 # Enough for 1 perk point... but why give XP instead of just awarding a full perk? +travel_miniscule_lifestyle_xp = { + value = miniscule_lifestyle_xp + multiply = 1.5 + if = { + limit = { + has_perk = been_there_done_that_perk + } + multiply = been_there_done_that_multiplier_value + } +} + travel_minor_lifestyle_xp = { value = minor_lifestyle_xp multiply = 1.5 @@ -197,6 +208,7 @@ learn_on_the_job_percentage = 20 # Zealous Proselytizer zealous_proselytizer_percentage = 25 +zealous_proselytizer_stargazer_percentage = 10 # Sanctioned Loopholes minor_buy_claim_piety_value = { diff --git a/common/script_values/00_men_at_arms_values.txt b/common/script_values/00_men_at_arms_values.txt index a25fe7b7..2a6798b9 100644 --- a/common/script_values/00_men_at_arms_values.txt +++ b/common/script_values/00_men_at_arms_values.txt @@ -69,6 +69,10 @@ heavy_cavalry_high_maint_cost = @[heavy_cavalry_high_maint_cost] ### Siege Weapons MAA +torch_bearers_recruitment_cost = @[siege_weapons_recruitment_cost * 0.5] +torch_bearers_low_maint_cost = @[siege_weapons_low_maint_cost * 0.5] +torch_bearers_high_maint_cost = @[siege_weapons_high_maint_cost * 0.5] + onager_recruitment_cost = @[siege_weapons_recruitment_cost] onager_low_maint_cost = @[siege_weapons_low_maint_cost] onager_high_maint_cost = @[siege_weapons_high_maint_cost] @@ -306,6 +310,36 @@ handpicked_faithful_recruitment_cost = @[heavy_infantry_recruitment_cost * 0.75] handpicked_faithful_low_maint_cost = @[heavy_infantry_low_maint_cost * 0.75] handpicked_faithful_high_maint_cost = @[heavy_infantry_high_maint_cost * 0.75] +#MPO + + steppe_raiders_recruitment_cost = @[light_cavalry_recruitment_cost * 0.9] + steppe_raiders_low_maint_cost = @[light_cavalry_low_maint_cost * 0.9] + steppe_raiders_high_maint_cost = @[light_cavalry_high_maint_cost * 0.9] + + heavy_horse_archers_recruitment_cost = @[skirmisher_recruitment_cost * 3.5] + heavy_horse_archers_low_maint_cost = @[skirmisher_low_maint_cost * 3.5] + heavy_horse_archers_high_maint_cost = @[skirmisher_high_maint_cost * 3.5] + + nomad_lancers_recruitment_cost = @[heavy_cavalry_recruitment_cost * 0.95] + nomad_lancers_low_maint_cost = @[heavy_cavalry_low_maint_cost * 0.95] + nomad_lancers_high_maint_cost = @[heavy_cavalry_high_maint_cost * 0.95] + + kheshig_recruitment_cost = @[skirmisher_recruitment_cost * 5] + kheshig_veterans_low_maint_cost = @[skirmisher_low_maint_cost * 5] + kheshig_veterans_high_maint_cost = @[skirmisher_high_maint_cost * 5] + + mangudai_recruitment_cost = @[skirmisher_recruitment_cost * 2.2] + mangudai_low_maint_cost = @[skirmisher_low_maint_cost * 2.2] + mangudai_high_maint_cost = @[skirmisher_high_maint_cost * 2.2] + + cataphract_archers_recruitment_cost = @[heavy_cavalry_recruitment_cost * 1.3] + cataphract_archers_low_maint_cost = @[heavy_cavalry_low_maint_cost * 1.3] + cataphract_archers_high_maint_cost = @[heavy_cavalry_high_maint_cost * 1.3] + + maturkan_warriors_recruitment_cost = @[archers_recruitment_cost * 1.05] + maturkan_warriors_low_maint_cost = @[archers_low_maint_cost * 1.05] + maturkan_warriors_high_maint_cost = @[archers_high_maint_cost * 1.05] + ############## # AI Weights # ############## @@ -443,25 +477,24 @@ culture_ai_weight_light_cavalry = { if = { # Cultures that REALLY like light cavalry limit = { + mpo_can_recruit_nomad_maa_trigger = no OR = { culture = { has_cultural_pillar = heritage_iranian } - - # Steppe cultures - culture = { has_cultural_pillar = heritage_turkic } - culture = { has_cultural_pillar = heritage_mongolic } } } add = 80 } if = { # Cultures that favours light cavalry limit = { + mpo_can_recruit_nomad_maa_trigger = no culture = { OR = { has_cultural_pillar = heritage_arabic - has_cultural_pillar = heritage_iranian has_cultural_pillar = heritage_berber has_cultural_pillar = heritage_iberian has_cultural_pillar = heritage_indo_aryan + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_mongolic } } } @@ -508,6 +541,7 @@ culture_ai_weight_heavy_cavalry = { if = { # Cultures that REALLY like heavy cavalry limit = { + mpo_can_recruit_nomad_maa_trigger = no OR = { culture = { has_cultural_pillar = heritage_iranian } @@ -520,6 +554,7 @@ culture_ai_weight_heavy_cavalry = { } if = { # Cultures that favours heavy cavalry limit = { + mpo_can_recruit_nomad_maa_trigger = no OR = { culture = { has_cultural_pillar = heritage_central_germanic } culture = { has_cultural_pillar = heritage_frankish } diff --git a/common/script_values/00_mongol_values.txt b/common/script_values/00_mongol_values.txt index dee4947c..ad3ee507 100644 --- a/common/script_values/00_mongol_values.txt +++ b/common/script_values/00_mongol_values.txt @@ -8,7 +8,21 @@ # Chance of Mongols appearing per year between 1180 and 1250 -temujin_appearance_base_chance = 1 +temujin_appearance_base_chance = { + value = 1 + #player temujin should start getting a higher chance of becoming Genghis faster + if = { + limit = { + exists = character:125501 + character:125501 = { + is_ai = no + is_physically_able_ai_adult = yes + } + current_date > 1190.1.1 + } + add = 30 + } +} # Weight used in selecting targets for the automated Mongol invasions mongol_invasion_target_character_weight = { @@ -222,4 +236,4 @@ mongol_successor_faith_chance = { add = 5 } } -} \ No newline at end of file +} diff --git a/common/script_values/00_scheme_values.txt b/common/script_values/00_scheme_values.txt index 10c83cfe..9088f2f8 100644 --- a/common/script_values/00_scheme_values.txt +++ b/common/script_values/00_scheme_values.txt @@ -19,6 +19,18 @@ scheme_progress_loss = { subtract = scope:scheme.scheme_progress multiply = -0.1 } +scheme_progress_33 = { + value = scope:scheme.scheme_phase_duration + multiply = 0.33 +} +scheme_progress_50 = { + value = scope:scheme.scheme_phase_duration + multiply = 0.5 +} +scheme_progress_66 = { + value = scope:scheme.scheme_phase_duration + multiply = 0.66 +} # Secrecy changes minor_secrecy_loss = -0.05 medium_secrecy_loss = -0.1 @@ -184,6 +196,21 @@ piety_bribe_value = { } } +herd_bribe_value = { + # Base. + value = major_herd_value_static + # Your tier. + add = { + value = 25 + multiply = scope:actor.highest_held_title_tier + } + # Their tier. + add = { + value = 25 + multiply = scope:recipient.highest_held_title_tier + } +} + #GIFTS gift_value = { value = 50 @@ -2583,48 +2610,82 @@ agent_groups_owner_perspective_value = { agent_groups_target_character_perspective_value = { if = { limit = { - scope:scheme ?= { - is_scheme_target_type = title - } + exists = scope:target.holder } - scope:scheme ?= { - scheme_target_title.holder ?= { save_temporary_scope_as = target } + scope:target.holder = { + # We need to check the any's here to avoid +0s if there's no valid chars. + if = { + limit = { + any_courtier = { is_valid_agent_standard_trigger = yes } + } + add = { + value = 3 + multiply = { + value = 0 + every_courtier = { + limit = { is_valid_agent_standard_trigger = yes } + add = 1 + } + max = 5 + } + desc = scheme_odds.agents.target_holder.number_of_valid_courtiers_agents + } + } + if = { + limit = { + any_vassal = { is_valid_agent_standard_trigger = yes } + } + add = { + value = 2 + multiply = { + value = 0 + every_vassal = { + limit = { is_valid_agent_standard_trigger = yes } + add = 1 + } + max = 5 + } + desc = scheme_odds.agents.target_holder.number_of_valid_vassal_agents + } + } } } - scope:target = { - # We need to check the any's here to avoid +0s if there's no valid chars. - if = { - limit = { - any_courtier = { is_valid_agent_standard_trigger = yes } - } - add = { - value = 3 - multiply = { - value = 0 - every_courtier = { - limit = { is_valid_agent_standard_trigger = yes } - add = 1 - } - max = 5 + else = { + scope:target = { + # We need to check the any's here to avoid +0s if there's no valid chars. + if = { + limit = { + any_courtier = { is_valid_agent_standard_trigger = yes } } - desc = scheme_odds.agents.target.number_of_valid_courtiers_agents - } - } - if = { - limit = { - any_vassal = { is_valid_agent_standard_trigger = yes } - } - add = { - value = 2 - multiply = { - value = 0 - every_vassal = { - limit = { is_valid_agent_standard_trigger = yes } - add = 1 + add = { + value = 3 + multiply = { + value = 0 + every_courtier = { + limit = { is_valid_agent_standard_trigger = yes } + add = 1 + } + max = 5 } - max = 5 + desc = scheme_odds.agents.target.number_of_valid_courtiers_agents + } + } + if = { + limit = { + any_vassal = { is_valid_agent_standard_trigger = yes } + } + add = { + value = 2 + multiply = { + value = 0 + every_vassal = { + limit = { is_valid_agent_standard_trigger = yes } + add = 1 + } + max = 5 + } + desc = scheme_odds.agents.target.number_of_valid_vassal_agents } - desc = scheme_odds.agents.target.number_of_valid_vassal_agents } } } @@ -3029,6 +3090,19 @@ odds_skill_contribution_diplomacy_value = { } } } +odds_skill_contribution_diplomacy_title_value = { + add = { + value = scope:owner.diplomacy + desc = scheme_odds.diplomacy.owner + } + scope:target.holder ?= { + add = { + value = scope:target.holder.diplomacy + desc = scheme_odds.diplomacy.target_holder + multiply = -0.5 + } + } +} odds_skill_contribution_martial_value = { add = { value = scope:owner.martial @@ -3068,6 +3142,25 @@ odds_skill_contribution_intrigue_value = { } } } + +odds_variables_contribution_murder = { + ## nomad_events.0006 + if = { + limit = { + scope:owner = { + has_variable = achmach_murder_help_var + any_councillor = { + has_variable = achmach_murder_help_councillor_var + } + } + } + add = { + value = 15 + desc = "ACHMACH_MURDER_BONUS" + } + } +} + odds_skill_contribution_learning_value = { add = { value = scope:owner.learning @@ -3814,6 +3907,14 @@ odds_learn_language_scheme_misc_value = { } add = 4 } + if = { + limit = { + scope:owner ?= { + var:family_widow_forbidden_divorce ?= scope:target + } + } + add = 20 + } } } @@ -4051,7 +4152,73 @@ odds_subsume_province_scheme_misc_value = { } -odds_raid_estate_scheme_misc_value = { +# same as odds_raid_estate_scheme_misc_value but target is a title +odds_dispute_border_scheme_misc_value = { + add = { + value = 0 + desc = scheme_odds.misc_modifiers + add = { + value = scope:owner.influence_level + multiply = 2 + } + add = { + value = scope:target.influence_level + multiply = -4 + } + if = { + limit = { + scope:target.house = scope:owner.top_liege.house + } + add = -12 + } + if = { + limit = { + scope:owner.house = { + is_powerful_family = yes + is_dominant_family = no + } + } + add = 8 + } + if = { + limit = { + scope:target.house = { + is_powerful_family = yes + is_dominant_family = no + } + } + add = -16 + } + if = { + limit = { + scope:target.domicile ?= { + OR = { + has_domicile_building_or_higher = barracks_01 + has_domicile_building_or_higher = guardhouse_01 + has_domicile_building_or_higher = watchtower_01 + has_domicile_building_or_higher = estate_main_02 + } + } + } + add = -4 + } + if = { + limit = { + scope:target.domicile ?= { + OR = { + has_domicile_building_or_higher = barracks_03 + has_domicile_building_or_higher = guardhouse_03 + has_domicile_building_or_higher = watchtower_03 + has_domicile_building_or_higher = estate_main_04 + } + } + } + add = -12 + } + } +} + +odds_dispute_border_scheme_misc_value = { add = { value = 0 desc = scheme_odds.misc_modifiers @@ -4089,7 +4256,7 @@ odds_raid_estate_scheme_misc_value = { } if = { limit = { - scope:target.domicile = { + scope:target.holder.domicile ?= { OR = { has_domicile_building_or_higher = barracks_01 has_domicile_building_or_higher = guardhouse_01 @@ -4102,7 +4269,73 @@ odds_raid_estate_scheme_misc_value = { } if = { limit = { - scope:target.domicile = { + scope:target.holder.domicile ?= { + OR = { + has_domicile_building_or_higher = barracks_03 + has_domicile_building_or_higher = guardhouse_03 + has_domicile_building_or_higher = watchtower_03 + has_domicile_building_or_higher = estate_main_04 + } + } + } + add = -12 + } + } +} + +# same as odds_dispute_border_scheme_misc_value but target is a character +odds_raid_estate_scheme_misc_value = { + add = { + value = 0 + desc = scheme_odds.misc_modifiers + add = { + value = scope:owner.influence_level + multiply = 2 + } + add = { + value = scope:target.influence_level + multiply = -4 + } + if = { + limit = { + scope:target.house = scope:owner.top_liege.house + } + add = -12 + } + if = { + limit = { + scope:owner.house = { + is_powerful_family = yes + is_dominant_family = no + } + } + add = 8 + } + if = { + limit = { + scope:target.house = { + is_powerful_family = yes + is_dominant_family = no + } + } + add = -16 + } + if = { + limit = { + scope:target.holder.domicile = { + OR = { + has_domicile_building_or_higher = barracks_01 + has_domicile_building_or_higher = guardhouse_01 + has_domicile_building_or_higher = watchtower_01 + has_domicile_building_or_higher = estate_main_02 + } + } + } + add = -4 + } + if = { + limit = { + scope:target.holder.domicile = { OR = { has_domicile_building_or_higher = barracks_03 has_domicile_building_or_higher = guardhouse_03 @@ -4671,6 +4904,14 @@ odds_romance_scheme_misc_value = { } add = -36 } + if = { + limit = { + scope:owner ?= { + var:family_widow_forbidden_divorce ?= scope:target + } + } + add = 20 + } } } diff --git a/common/script_values/00_visit_settlement_values.txt b/common/script_values/00_visit_settlement_values.txt index 0fb7705b..6c7e41a9 100644 --- a/common/script_values/00_visit_settlement_values.txt +++ b/common/script_values/00_visit_settlement_values.txt @@ -1,4 +1,10 @@  +visit_settlement_lock_days = { + value = 0 + add = define:NGame|MULTIPLAYER_EVENT_TIME_OUT + add = 2 #Some buffer +} + visit_settlement_minimum_cooldown_days = 90 #3 months visit_settlement_minimum_cooldown_months = 3 #Sync with visit_settlement_minimum_cooldown_days visit_settlement_small_cooldown_days = 180 #6 months @@ -60,4 +66,4 @@ laamp_ai_spending_pants_value = 500 visit_settlement_piety_gain_value = { value = major_piety_gain divide = root.var:visit_settlement_church_donation -} \ No newline at end of file +} diff --git a/common/script_values/00_war_values.txt b/common/script_values/00_war_values.txt index ca23c677..2f23a8f2 100644 --- a/common/script_values/00_war_values.txt +++ b/common/script_values/00_war_values.txt @@ -41,6 +41,14 @@ standard_truce_duration_days = { } add = 900 } + ## Shorter truce if both sides are nomads + if = { + limit = { + scope:attacker = { government_has_flag = government_is_nomadic } + scope:defender = { government_has_flag = government_is_nomadic } + } + subtract = 730 + } # A truce should at least give a 2-year breather. min = 730 if = { @@ -782,14 +790,19 @@ scale_10_war_defender_win = { ###################### # AI Decision Making # ###################### -# The two effects below are to be used in combination as "root_military_strength_higher_than_value > target_military_strength_root_value" to check player vs enemy strength -root_military_strength_higher_than_value = { # Once again joe saves the day or erm, script. + +# Compute military strength against *scope:target_military*. +# +# This script value and the one after it are to be used in combination as +# "root_military_strength_higher_than_military_target_value > target_military_strength_root_value" +# to check player vs enemy strength. +root_military_strength_higher_than_military_target_value = { value = 0 add = max_military_strength # Add num of troops if = { limit = { any_ally = { - NOT = { has_truce = scope:target_military } + NOT = { has_truce = scope:target_military } } } every_ally = { @@ -805,22 +818,65 @@ root_military_strength_higher_than_value = { # Once again joe saves the day or e } } -target_military_strength_root_value = { # One above calcs player strength (plus multiplier), this one is enemy strenth +# One above calcs player strength (plus multiplier), this one is enemy strength. +target_military_strength_root_value = { value = 0 - add = scope:target_military.max_military_strength # this should be a character, probably a top liege + if = { + limit = { exists = scope:target_military } + add = scope:target_military.max_military_strength # this should be a character, probably a top liege + scope:target_military = { + every_ally = { + limit = { + NOT = { has_truce = root } + } + add = max_military_strength + } + } + } +} + +# Compute military strength against *scope:recipient*. +# +# This script value and the one after it are to be used in combination as +# "root_military_strength_higher_than_recipient_value > recipient_strength_root_value" +# to check player vs enemy strength. +root_military_strength_higher_than_recipient_value = { + value = 0 + add = max_military_strength # Add num of troops if = { limit = { any_ally = { - NOT = { has_truce = root } + NOT = { has_truce = scope:recipient } } } every_ally = { - limit = { - NOT = { has_truce = root } + limit = { + NOT = { has_truce = scope:recipient } } add = max_military_strength } } + if = { + limit = { exists = var:ai_strength_multiplier } + multiply = var:ai_strength_multiplier # 1.25 == 25% stronger than, remember to potty train your script and have it remove the variable after usage!! + } +} + +# One above calcs player strength (plus multiplier), this one is enemy strength. +recipient_strength_root_value = { + value = 0 + if = { + limit = { exists = scope:recipient } + add = scope:recipient.max_military_strength # this should be a character, probably a top liege + scope:recipient = { + every_ally = { + limit = { + NOT = { has_truce = root } + } + add = max_military_strength + } + } + } } war_attacker_total_strength_value = { diff --git a/common/script_values/01_dynamic_values.txt b/common/script_values/01_dynamic_values.txt index 3671f21d..7634c263 100644 --- a/common/script_values/01_dynamic_values.txt +++ b/common/script_values/01_dynamic_values.txt @@ -314,6 +314,10 @@ create_duchy_title_value = { limit = { government_has_flag = government_is_tribal } # Tribal subtract = 0.5 } + if = { + limit = { government_has_flag = government_is_nomadic } # Nomads + subtract = 0.5 + } if = { limit = { faith = { has_doctrine = tenet_pursuit_of_power } # Pursuit of Power @@ -377,6 +381,10 @@ create_kingdom_title_value = { limit = { government_has_flag = government_is_tribal } # Tribal subtract = 0.5 } + if = { + limit = { government_has_flag = government_is_nomadic } # Nomads + subtract = 0.5 + } if = { limit = { faith = { has_doctrine = tenet_pursuit_of_power } # Pursuit of Power @@ -440,6 +448,10 @@ create_empire_title_value = { limit = { government_has_flag = government_is_tribal } # Tribal subtract = 0.5 } + if = { + limit = { government_has_flag = government_is_nomadic } # Nomads + subtract = 0.5 + } if = { limit = { faith = { has_doctrine = tenet_pursuit_of_power } # Pursuit of Power @@ -1262,6 +1274,18 @@ recruit_guest_interaction_cost_with_list = { list = recruiting_family add = individual_recruit_guest_interaction_cost } + if = { + limit = { + scope:actor = { + is_ai = yes + } + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + } + multiply = 0 + } } root_attraction_based_female_chance = { @@ -1711,14 +1735,14 @@ ai_war_chest_defender_holy_war_gold_value = { steward_convert_culture_value = { value = yearly_character_income - multiply = 5 - min = 150 + multiply = 3 + min = 100 } steward_increase_development_value = { value = yearly_character_income - multiply = 3 - min = 100 + multiply = 2 + min = 50 } minimum_ai_gold_value_for_tyranny_wars = { diff --git a/common/script_values/02_religion_values.txt b/common/script_values/02_religion_values.txt index b4a8d344..390403f3 100644 --- a/common/script_values/02_religion_values.txt +++ b/common/script_values/02_religion_values.txt @@ -3461,7 +3461,7 @@ faith_conversion_cost_mult = { else_if = { limit = { scope:character = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic } } multiply = { @@ -4213,12 +4213,28 @@ faith_conversion_cost_mult = { multiply = { value = 1 subtract = { - desc = faith_conversion_cost_witch_event + desc = faith_conversion_cost_event format = "BREAKDOWN_FORMAT_PIETY_PERCENTAGE_POSITIVE_IS_BAD" value = 0.5 } } } + if = { + limit = { + scope:character = { + has_character_modifier = mpo_islam_conversion_modifier + } + scope:new_faith = { religion = religion:islam_religion } + } + multiply = { + value = 1 + subtract = { + desc = faith_conversion_cost_mpo_islam_event + format = "BREAKDOWN_FORMAT_PIETY_PERCENTAGE_POSITIVE_IS_BAD" + value = 0.25 + } + } + } # Removing 1 to offset the value and present it as expected by the code subtract = { @@ -4533,3 +4549,28 @@ great_holy_war_target_kingdom_weight_simplified = { multiply = ghw_target_religious_vengeance } } + +holy_site_reform_tracker_value = { + value = 0 + faith = { + every_holy_site = { + limit = { + county = { + save_temporary_scope_as = current_holy_site + OR = { + is_holy_site_controlled_by = root + root.confederation ?= { + any_confederation_member = { + scope:current_holy_site = { + is_holy_site_controlled_by = prev + } + } + } + } + holder.faith = root.faith + } + } + add = 1 + } + } +} diff --git a/common/script_values/03_dlc_fp2_script_values.txt b/common/script_values/03_dlc_fp2_script_values.txt index 1679b0ef..d77a76c8 100644 --- a/common/script_values/03_dlc_fp2_script_values.txt +++ b/common/script_values/03_dlc_fp2_script_values.txt @@ -50,14 +50,31 @@ challenge_to_chess_stress_stake_value = { value = medium_stress_gain } challenge_to_chess_gold_change_value = { value = 0 - # To keep this balanced, we want to use the lowest income of scope:actor & scope:recipient. + #Guess you don't have a monthly income, most of the time if = { - limit = { scope:actor.monthly_character_income >= scope:recipient.monthly_character_income } - add = scope:recipient.monthly_character_income + limit = { + scope:actor = { + monthly_character_income <= 0 + is_landless_adventurer = yes + } + } + if = { + limit = { scope:actor.gold > scope:recipient.gold } + add = scope:recipient.monthly_character_income + multiply = 9 + } + else = { add = scope:actor.gold } + } + else = { + # To keep this balanced, we want to use the lowest income of scope:actor & scope:recipient. + if = { + limit = { scope:actor.monthly_character_income >= scope:recipient.monthly_character_income } + add = scope:recipient.monthly_character_income + } + else = { add = scope:actor.monthly_character_income } + # And, because month-to-month income isn't much, we take it up to a significant fraction of a year's earnings. + multiply = 9 } - else = { add = scope:actor.monthly_character_income } - # And, because month-to-month income isn't much, we take it up to a significant fraction of a year's earnings. - multiply = 9 } bg_stake_land_evaluate_appropriate_county_ordering_value = { @@ -1099,6 +1116,10 @@ pt_sum_small_value = { } multiply = 0.5 } + if = { # double the cost if you're just buying off a nomad without any prerequisites + limit = { fp2_purchase_truce_interaction_soft_requirements_trigger = no } + multiply = 2 + } } pt_sum_medium_value = { @@ -1124,6 +1145,10 @@ pt_sum_medium_value = { } multiply = 0.5 } + if = { # double the cost if you're just buying off a nomad without any prerequisites + limit = { fp2_purchase_truce_interaction_soft_requirements_trigger = no } + multiply = 2 + } } pt_sum_large_value = { @@ -1149,4 +1174,8 @@ pt_sum_large_value = { } multiply = 0.5 } + if = { # double the cost if you're just buying off a nomad without any prerequisites + limit = { fp2_purchase_truce_interaction_soft_requirements_trigger = no } + multiply = 2 + } } diff --git a/common/script_values/04_ep2_hunt_values.txt b/common/script_values/04_ep2_hunt_values.txt index 86abd3f0..a78307f7 100644 --- a/common/script_values/04_ep2_hunt_values.txt +++ b/common/script_values/04_ep2_hunt_values.txt @@ -156,6 +156,13 @@ hunt_hunting_grounds_success_value = { } desc = hunt_success_chance.rainbow_mountains_01 } + add = { + if = { + limit = { has_building = visegrad_castle_01 } + add = 24 + } + desc = hunt_success_chance.visegrad_castle_01 + } } hunt_logging_camps_success_value = { @@ -380,6 +387,26 @@ hunt_success_chance_value = { desc = hunt_success_chance.ep2_beastmaster_modifier } } + if = { # Daydreaming about Birds + limit = { + involved_activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + has_character_modifier = mpo_daydreaming_birds_modifier + } + add = { + value = 5 + desc = hunt_success_chance.mpo_daydreaming_birds_modifier + } + } + if = { # Le childhood + limit = { has_character_modifier = eagle_hunter_childhood_modifier } + + add = { + value = 5 + desc = hunt_success_chance.eagle_hunter_childhood_modifier + } + } if = { # Scenthound limit = { has_character_modifier = dog_story_scenthound_modifier @@ -445,6 +472,15 @@ hunt_success_chance_value = { desc = hunt_success_chance.master_of_hunt } } + if = { + limit = { + has_court_position = master_of_hunt_court_position + } + add = { + value = 10 + desc = hunt_success_chance.master_of_hunt_holder + } + } # HUNTSMAN if = { limit = { exists = court_position:huntperson_camp_officer } @@ -499,6 +535,19 @@ hunt_success_chance_value = { desc = estate_has_kennels } } + # HUNTING EAGLE + if = { + limit = { + involved_activity = { + has_activity_option = { category = special_type option = hunt_type_falconry } + } + has_available_eagle_trigger = yes + } + add = { + value = 10 + desc = hunt_success_chance.hunting_eagle + } + } } # GUESTS if = { # Hunters @@ -540,7 +589,17 @@ hunt_success_chance_value = { } } #OPTION - if = { + if = { # Nomads do not use Attendants option + limit = { + activity_host = { government_has_flag = government_is_nomadic } + } + add = { + value = 2.5 + multiply = hunt_success_chance_roco_amenity_level_value + desc = hunt_success_chance.nomadic + } + } + else_if = { limit = { has_activity_option = { category = hunt_option_attendants option = hunt_attendants_normal } } @@ -782,55 +841,66 @@ hunt_province_reference_value = { value = 0 if = { limit = { - OR = { - terrain = farmlands - terrain = floodplains - } + NOT = { scope:special_option ?= flag:hunt_type_nerge } } - add = -10 - } - else_if = { - limit = { - OR = { - terrain = desert - terrain = desert_mountains - terrain = oasis + if = { + limit = { + OR = { + terrain = farmlands + terrain = floodplains + } } + add = -10 } - add = -5 - } - else_if = { - limit = { - OR = { - terrain = hills - terrain = wetlands + else_if = { + limit = { + OR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + } } + add = -5 } - add = 5 - } - else_if = { - limit = { - OR = { - terrain = taiga - terrain = forest - terrain = mountains - terrain = jungle + else_if = { + limit = { + OR = { + terrain = hills + terrain = wetlands + } } + add = 5 + } + else_if = { + limit = { + OR = { + terrain = taiga + terrain = forest + terrain = mountains + terrain = jungle + } + } + add = 10 } - add = 10 } desc = hunt_success_chance.terrain } # POPULATION if = { - limit = { has_holding = no } + limit = { + has_holding = no + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } add = { value = 10 desc = hunt_success_chance.no_holding } } if = { - limit = { county.development_level >= terrible_development_level } + limit = { + county.development_level >= terrible_development_level + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } # Example: development = 15 / 3 * -1 = -5 county ?= { add = { @@ -847,17 +917,23 @@ hunt_province_reference_value = { OR = { has_building_or_higher = hunting_grounds_01 has_building_or_higher = rainbow_mountains_01 + has_building_or_higher = visegrad_castle_01 } + NOT = { scope:special_option ?= flag:hunt_type_nerge } } add = hunt_hunting_grounds_success_value } if = { # Logging Camps - limit = { has_building_or_higher = logging_camps_01 } + limit = { + has_building_or_higher = logging_camps_01 + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } add = hunt_logging_camps_success_value } if = { # Royal Reserves limit = { county.title_province ?= { has_building_or_higher = royal_forest_01 } + NOT = { scope:special_option ?= flag:hunt_type_nerge } } county.title_province = { add = hunt_royal_reserves_success_value } } @@ -865,6 +941,7 @@ hunt_province_reference_value = { if = { limit = { county ?= { has_county_modifier = hunt_mismanaged_game_modifier } + NOT = { scope:special_option ?= flag:hunt_type_nerge } } add = { value = -5 @@ -874,6 +951,7 @@ hunt_province_reference_value = { if = { # Abundant Game limit = { county ?= { has_county_modifier = ep3_abundant_game_modifier } + NOT = { scope:special_option ?= flag:hunt_type_nerge } } add = { value = 10 @@ -883,6 +961,7 @@ hunt_province_reference_value = { if = { # Wild Predators limit = { county ?= { has_county_modifier = ep3_wild_predators_modifier } + NOT = { scope:special_option ?= flag:hunt_type_nerge } } add = { value = -5 @@ -892,6 +971,7 @@ hunt_province_reference_value = { if = { limit = { county ?= { has_county_modifier = hunt_punished_locals_modifier } + NOT = { scope:special_option ?= flag:hunt_type_nerge } } add = { value = 5 @@ -901,6 +981,7 @@ hunt_province_reference_value = { if = { # Inspection Modifiers limit = { has_province_modifier = inspection_hidden_hinterlands_recruit_modifier + NOT = { scope:special_option ?= flag:hunt_type_nerge } } add = { value = 10 @@ -910,6 +991,7 @@ hunt_province_reference_value = { if = { # Inspection Modifiers limit = { has_province_modifier = inspection_hidden_hinterlands_hunters_modifier + NOT = { scope:special_option ?= flag:hunt_type_nerge } } add = { value = 10 @@ -918,7 +1000,10 @@ hunt_province_reference_value = { } # VARIABLES if = { - limit = { exists = var:recent_hunt_held } + limit = { + exists = var:recent_hunt_held + NOT = { scope:special_option ?= flag:hunt_type_nerge } + } add = { value = -10 multiply = var:recent_hunt_held @@ -1551,3 +1636,191 @@ hunt_entourage_sodding_everyone_set_weighting_value = { } } } + +### Nerge Outcome Values +# Unimpressive Nerge +unimpressive_nerge_dread_value = -25 + +# Regular Nerge +regular_nerge_dread_value = 10 +regular_nerge_prestige_value = { + value = 100 + multiply = nerge_prestige_multiplier +} +regular_nerge_gold_value = 25 +regular_nerge_legitimacy_value = 10 +regular_nerge_guest_prestige_value = 25 + +# Impressive Nerge +impressive_nerge_dread_value = 30 +impressive_nerge_prestige_value = { + value = 200 + multiply = nerge_prestige_multiplier +} +impressive_nerge_gold_value = 75 +impressive_nerge_legitimacy_value = { + value = great_nerge_legitimacy_value + divide = 2 +} +impressive_nerge_guest_prestige_value = { + value = impressive_nerge_prestige_value + divide = 2 +} + +# Great Nerge +great_nerge_dread_value = 40 +great_nerge_prestige_value = { + value = 250 + multiply = nerge_prestige_multiplier +} +great_nerge_gold_value = 150 +great_nerge_legitimacy_value = { + value = fantastic_nerge_legitimacy_value + divide = 2 +} +great_nerge_guest_prestige_value = { + value = great_nerge_prestige_value + divide = 2 +} + +# Fantastic Nerge +fantastic_nerge_dread_value = 50 +fantastic_nerge_prestige_value = { + value = 350 + multiply = nerge_prestige_multiplier +} +fantastic_nerge_gold_value = 250 +fantastic_nerge_legitimacy_value = 200 +fantastic_nerge_martial_value = 1 +fantastic_nerge_guest_prestige_value = { + value = fantastic_nerge_prestige_value + divide = 2 +} +fantastic_nerge_guest_martial_value = fantastic_nerge_martial_value + +nerge_score_multiplier_value = { + value = 1 + add = { + value = scope:activity.activity_location.county.county_fertility + divide = 200 + } + if = { + limit = { + scope:activity.activity_location.county = { + any_county_situation_sub_region = { + sub_region_current_phase = situation_steppe_sky_blessing_season + } + } + } + add = 0.5 + } + else_if = { + limit = { + scope:activity.activity_location.county = { + any_county_situation_sub_region = { + OR = { + sub_region_current_phase = situation_steppe_warm_nights_season + sub_region_current_phase = situation_steppe_abundant_grazing_season + } + } + } + } + add = 0.25 + } + else_if = { + limit = { + scope:activity.activity_location.county = { + any_county_situation_sub_region = { + OR = { + sub_region_current_phase = situation_steppe_white_zud_season + sub_region_current_phase = situation_steppe_cold_zud_season + } + } + } + } + add = -0.1 + } + else_if = { + limit = { + scope:activity.activity_location.county = { + any_county_situation_sub_region = { + sub_region_current_phase = situation_steppe_severe_drought_season + } + } + } + add = -0.25 + } + else_if = { + limit = { + scope:activity.activity_location.county = { + any_county_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + } + } + } + add = -0.5 + } + if = { + limit = { + scope:activity.activity_host = { has_activity_intent = successful_nerge_intent } + } + add = 0.1 + } + scope:activity = { + every_attending_character = { + if = { + limit = { + NOT = { this = scope:activity.activity_host } + OR = { + has_activity_intent = successful_nerge_intent + has_trait = lifestyle_hunter + martial >= 16 + prowess >= 16 + } + } + add = 0.1 + } + } + activity_host = { + add = { + value = martial + divide = 200 + } + } + } + scope:activity.activity_host = { + switch = { + trigger = has_realm_law + nomadic_authority_5 = { add = 0.25 } + nomadic_authority_4 = { add = 0.2 } + nomadic_authority_3 = { add = 0.1 } + nomadic_authority_2 = { add = 0.05 } + } + } +} + +nerge_prestige_multiplier = { + value = 1 + if = { + limit = { + involved_activity = { + has_activity_option = { + category = hunt_option_party_size + option = hunt_party_size_many + } + } + } + multiply = 1.5 + } + else_if = { + limit = { + involved_activity = { + has_activity_option = { + category = hunt_option_party_size + option = hunt_party_size_normal + } + } + } + multiply = 1.25 + } +} diff --git a/common/script_values/04_ep2_tournament_values.txt b/common/script_values/04_ep2_tournament_values.txt index f8940f80..43cc6a07 100644 --- a/common/script_values/04_ep2_tournament_values.txt +++ b/common/script_values/04_ep2_tournament_values.txt @@ -2224,26 +2224,110 @@ contest_valid_contestants_count_value = { tournament_base_cost = { value = 100 + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } tournament_option_bad_cost = { value = 20 + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } tournament_option_normal_cost = { value = 60 + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } tournament_option_good_cost = { value = 180 + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } tournament_option_very_good_cost = { value = 360 + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } tournament_option_splendid_cost = { value = 720 + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } tournament_option_bad_era_scaled_cost = { diff --git a/common/script_values/04_ep2_wedding_values.txt b/common/script_values/04_ep2_wedding_values.txt index c4a6e141..606751fc 100644 --- a/common/script_values/04_ep2_wedding_values.txt +++ b/common/script_values/04_ep2_wedding_values.txt @@ -147,7 +147,7 @@ limit = { scope:impress_check = { OR = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic government_has_flag = government_is_theocracy } } @@ -801,6 +801,20 @@ base_wedding_cost = { } add = 75 } + if = { + limit = { + is_ai = yes + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = yes + has_game_rule = very_hard_difficulty + } + multiply = 0.25 + } } #This is only to be used in the arrange marriage interaction window @@ -1135,3 +1149,18 @@ dolt_stewardship_adjusted_difficulty_value = { value = 24 subtract = scope:dolt.stewardship } + +break_betrothal_prestige_cost = { + value = 1 + every_close_family_member = { + limit = { + court_owner = scope:attacker + is_betrothed = yes + betrothed = { + court_owner = scope:defender + is_close_family_of = scope:defender + } + } + add = 1 + } +} diff --git a/common/script_values/05_bp2_hostage_values.txt b/common/script_values/05_bp2_hostage_values.txt index a945ef53..2230dfd9 100644 --- a/common/script_values/05_bp2_hostage_values.txt +++ b/common/script_values/05_bp2_hostage_values.txt @@ -34,6 +34,11 @@ max_strength_seventy_five_percent_value = { multiply = 0.9 } +max_strength_with_allies_value = { + value = max_military_strength + every_ally = { add = max_military_strength } +} + current_strength_ninety_percent_value = { value = current_military_strength multiply = 0.9 diff --git a/common/script_values/06_ce1_epidemics_values.txt b/common/script_values/06_ce1_epidemics_values.txt index 367480ee..67fd80db 100644 --- a/common/script_values/06_ce1_epidemics_values.txt +++ b/common/script_values/06_ce1_epidemics_values.txt @@ -301,6 +301,15 @@ outbreak_chance_minor_mult_value = { } add = outbreak_increase_mult_low } + if = { + limit = { + OR = { + has_holding_type = herder_holding + has_holding_type = nomad_holding + } + } + add = outbreak_decrease_mult_high + } multiply = 0.8 min = 0.001 @@ -546,6 +555,15 @@ outbreak_chance_major_mult_value = { } add = outbreak_increase_mult_low } + if = { + limit = { + OR = { + has_holding_type = herder_holding + has_holding_type = nomad_holding + } + } + add = outbreak_decrease_mult_high + } multiply = 1.05 @@ -1518,7 +1536,7 @@ spread_chance_epidemics_mult_value = { has_building_or_higher = common_tradeport_06 num_buildings > 10 } - add = spread_increase_mult_very_high + add = spread_increase_mult_high } #less patchy, mult @@ -1541,7 +1559,6 @@ spread_chance_epidemics_mult_value = { multiply = 0.025 } - # Game rules if = { limit = { @@ -1668,6 +1685,15 @@ spread_chance_epidemics_mult_value = { } add = spread_increase_mult_medium } + if = { + limit = { + OR = { + has_holding_type = herder_holding + has_holding_type = nomad_holding + } + } + add = spread_decrease_mult_unlikely + } } #### DAILY INFECTION RATE ### @@ -2070,6 +2096,38 @@ epidemic_development_loss_value = { } } +#How badly effected is a county's fertility? +epidemic_fertility_loss_value = { + subtract = scope:base_loss + + scope:epidemic = { + switch = { + trigger = outbreak_intensity + minor = { subtract = 2.5 } + major = { subtract = 5 } + apocalyptic = { subtract = 7.5 } + } + } + + # Fertility + subtract = { + value = county_fertility + multiply = 0.3 + } + + multiply = { + value = 6 + divide = num_county_holdings + } + + multiply = { + value = 50 + subtract = title_province.epidemic_resistance + multiply = 0.005 + add = 1 + } +} + epidemic_fromdust_value = { value = minor_gold_value multiply = former_infected_county_count diff --git a/common/script_values/06_ce1_legends_values.txt b/common/script_values/06_ce1_legends_values.txt index 0c957140..15b22edf 100644 --- a/common/script_values/06_ce1_legends_values.txt +++ b/common/script_values/06_ce1_legends_values.txt @@ -683,7 +683,7 @@ legend_cost_scale_by_era = { limit = { exists = culture } - culture = { + culture ?= { if = { limit = { has_cultural_era_or_later = culture_era_late_medieval @@ -969,7 +969,7 @@ legend_piety_cost = { ### COURT POSITION TASKS ### monthly_court_position_task_cost_value = { - value = 0.1 + value = 0.05 } monthly_court_position_task_cost = { @@ -980,12 +980,47 @@ monthly_court_position_task_cost = { subtract = 1 min = 1 } - #Scale by era - add = { - value = monthly_court_position_task_cost_value - multiply = legend_cost_scale_by_era - subtract = monthly_court_position_task_cost_value - desc = legend_cost_scale_by_era_desc + if = { + limit = { + scope:liege.culture ?= { has_cultural_era_or_later = culture_era_late_medieval } + } + multiply = { + value = 1.75 + desc = culture_era_late_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.culture ?= { has_cultural_era_or_later = culture_era_high_medieval } + } + multiply = { + value = 1.5 + desc = culture_era_high_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + else_if = { + limit = { + scope:liege.culture ?= { has_cultural_era_or_later = culture_era_early_medieval } + } + multiply = { + value = 1.25 + desc = culture_era_early_medieval_salary_mod + format = "BASE_VALUE_FORMAT_DECIMALS_PLUS_NEGATIVE" + } + } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:liege = { + is_ai = yes + } + } + multiply = 0 } } @@ -994,6 +1029,16 @@ monthly_court_position_task_cost_double = { multiply = 2 } +monthly_court_position_task_cost_triple = { + value = monthly_court_position_task_cost + multiply = 3 +} + +monthly_court_position_task_cost_quadruple = { + value = monthly_court_position_task_cost + multiply = 4 +} + ### DYNAMIC VALUES ### legend_piety_gain = { value = 0 @@ -1490,7 +1535,7 @@ base_chronicler_promote_legend_realm_cost = { value = 0 if = { limit = { - scope:liege = { + scope:liege ?= { promoted_legend ?= { legend_owner = scope:liege } diff --git a/common/script_values/07_ep3_values.txt b/common/script_values/07_ep3_values.txt index 43d4ead7..6f8d71b8 100644 --- a/common/script_values/07_ep3_values.txt +++ b/common/script_values/07_ep3_values.txt @@ -654,6 +654,31 @@ appointment_score_interaction_multiplier_modifiers_value = { } } +# Eparch values +eparch_aptitude_modifier_scaling_value = { + value = 1 + if = { + limit = { exists = root } + add = root.aptitude:eparch_court_position + } + desc = MODIFIER_DEFINITION_MAIN_DESC_EPARCH_APTITUDE +} +university_cost_reduction_value = 0.25 +eparch_scheme_secrecy_bonus_value = { + if = { + limit = { + scope:owner = { has_court_position = eparch_court_position } + scope:target = { + domicile ?= { domicile_location = owner.top_liege.capital_province } + } + } + add = { + value = 15 + desc = eparch_scheme_bonus_desc + } + } +} + # State Faith ep3_state_faith_conversion_mult_value = 2 @@ -662,7 +687,7 @@ ep3_triumph_gold_cost = { value = 100 if = { limit = { - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } } add = 100 if = { @@ -680,7 +705,7 @@ ep3_triumph_influence_cost = { value = 0 if = { limit = { - has_government = administrative_government + government_has_flag = government_is_administrative } add = 50 if = { @@ -737,10 +762,14 @@ ep3_laamp_chance_score_value = { add = 3 } # Fame/Lifestyle/Commander - every_trait_in_category = { - category = fame - category = lifestyle - category = commander + every_character_trait = { + limit = { + OR = { + has_trait_category = fame + has_trait_category = lifestyle + has_trait_category = commander + } + } add = 3 } # Education @@ -795,6 +824,12 @@ ep3_laamp_chance_score_value = { } add = 5 } + if = { + limit = { + has_trait = nomadic_philosophy + } + add = 5 + } if = { limit = { culture = { has_cultural_parameter = much_more_likely_to_be_laamps } @@ -934,6 +969,10 @@ chariot_race_entrance_fee = { value = 50 } +chariot_race_base_cost_value = { + value = 200 +} + chariot_ordering_value = { value = 0 add = aptitude:charioteer_court_position @@ -1476,6 +1515,49 @@ governor_efficiency = { divide = 100 } } + + # Eparch court position + if = { + limit = { + employs_court_position = eparch_court_position + } + add = { + add = { + value = 1 + court_position:eparch_court_position ?= { + add = aptitude:eparch_court_position + } + multiply = 2 + desc = eparch_increase_efficiency_desc + } + divide = 100 + } + } + else_if = { + limit = { + top_liege ?= { + employs_court_position = eparch_court_position + } + NOT = { has_court_position = eparch_court_position } + domicile ?= { + domicile_location = { + this = county.holder.top_liege.capital_province + } + } + } + add = { + add = { + value = 1 + top_liege ?= { + court_position:eparch_court_position ?= { + add = aptitude:eparch_court_position + } + } + desc = eparch_increase_efficiency_vassal_desc + } + divide = 100 + } + } # Events add = { @@ -1820,14 +1902,15 @@ appointment_score_max_tt_value = { limit = { exists = scope:target exists = scope:secondary_recipient + NOT = { scope:secondary_recipient = scope:target.current_heir } } add = { value = "scope:target.current_heir.appointment_candidate_score(scope:target)" multiply = 1.1 } subtract = "scope:secondary_recipient.appointment_candidate_score(scope:target)" + min = 4 # We do this to prevent cases when the default score of the candidate is already much higher than that the heir } - min = 4 # We do this to prevent cases when the default score of the candidate is already much higher than that the heir multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value } @@ -2199,42 +2282,42 @@ task_contract_extra_reward_multiplier_value = 1.5 # Update all relevant paramete # How do we multiply the cash rewards in a task contract depending on the employer's tier? task_contract_tier_gold_multiplier_value = { - scope:task_contract.task_contract_employer ?= { + value = 1 # Barons and counts are neutral, so no multiplier needed here. + if = { + limit = { exists = scope:task_contract.task_contract_employer } # Kings'n'emperors. if = { - limit = { highest_held_title_tier >= define:NTaskContract|HIGH_TASK_CONTRACT_TIER } + limit = { scope:task_contract.task_contract_employer.highest_held_title_tier >= define:NTaskContract|HIGH_TASK_CONTRACT_TIER } add = 3 } # Dukes. else_if = { - limit = { highest_held_title_tier >= define:NTaskContract|MEDIUM_TASK_CONTRACT_TIER } + limit = { scope:task_contract.task_contract_employer.highest_held_title_tier >= define:NTaskContract|MEDIUM_TASK_CONTRACT_TIER } add = 2 } # Courtiers first, as we give them a bit less. else_if = { - limit = { highest_held_title_tier <= 0 } + limit = { scope:task_contract.task_contract_employer.highest_held_title_tier <= 0 } add = 0.5 ceiling = yes } - # Lastly, barons and counts are neutral, so no multiplier needed here. - else = { add = 1 } } } # How do we multiply the non-cash rewards in a task contract depending on the employer's tier? task_contract_tier_other_reward_multiplier_value = { - scope:task_contract.task_contract_employer = { + value = 1 # Barons and counts are neutral, so no multiplier needed here. + if = { + limit = { exists = scope:task_contract.task_contract_employer } # Kings'n'emperors. if = { - limit = { highest_held_title_tier >= define:NTaskContract|HIGH_TASK_CONTRACT_TIER } + limit = { scope:task_contract.task_contract_employer.highest_held_title_tier >= define:NTaskContract|HIGH_TASK_CONTRACT_TIER } add = 2.5 } # Dukes. else_if = { - limit = { highest_held_title_tier >= define:NTaskContract|MEDIUM_TASK_CONTRACT_TIER } + limit = { scope:task_contract.task_contract_employer.highest_held_title_tier >= define:NTaskContract|MEDIUM_TASK_CONTRACT_TIER } add = 1.5 } - # Lastly, barons and counts are neutral, so no multiplier needed here. - else = { add = 1 } } } @@ -2251,6 +2334,16 @@ task_contract_success_prestige_gain_full_value = { } multiply = 1.2 } + if = { + limit = { + scope:taker ?= { + house = { + has_house_modifier = legacy_adventurer_house_modifier + } + } + } + multiply = 1.15 + } } ## Boosted scaling reward. task_contract_success_prestige_gain_critical_value = { @@ -2323,24 +2416,34 @@ task_contract_success_gold_gain_full_value = { # Lifestyle perks. if = { limit = { - scope:task_contract.task_contract_taker ?= { has_perk = at_any_cost_perk } + exists = scope:task_contract.task_contract_taker + scope:task_contract.task_contract_taker = { has_perk = at_any_cost_perk } } multiply = 1.25 } # Stuff that NEEDS to stay at the bottom. ## Vary our final tally up a bit. if = { - limit = { scope:task_contract.task_contract_employer.ai_greed != 0 } + limit = { + exists = scope:task_contract.task_contract_taker + scope:task_contract.task_contract_employer.ai_greed != 0 + } add = { value = scope:task_contract.task_contract_employer.ai_greed multiply = -0.2 } } ## Plus change the last digit around slightly so the values look a little less robotic. - scope:gold_fuzz ?= { add = scope:gold_fuzz } + if = { + limit = { exists = scope:gold_fuzz } + add = scope:gold_fuzz + } ## And boost a bit further for exceptional rewards, so that they're never beneath the common rewards. if = { - limit = { scope:gold_safety_margin ?= flag:yes } + limit = { + exists = scope:gold_safety_margin + scope:gold_safety_margin = flag:yes + } add = 10 } ## Shouldn't happen but just in case someone is really, really, _really_ stingy: never pay less than at least a truly pathetic amount. @@ -2397,31 +2500,43 @@ task_contract_success_gold_gain_travel_value = { multiply = task_contract_tier_gold_multiplier_value # Lifestyle perks. if = { - limit = { - scope:task_contract.task_contract_taker = { has_perk = at_any_cost_perk } + limit = { exists = scope:task_contract.task_contract_taker } + if = { + limit = { + scope:task_contract.task_contract_taker = { has_perk = at_any_cost_perk } + } + multiply = 1.25 } - multiply = 1.25 - } - if = { - limit = { - scope:task_contract.task_contract_taker = { has_perk = malice_implicit_perk } + if = { + limit = { + scope:task_contract.task_contract_taker = { has_perk = malice_implicit_perk } + } + multiply = 2 } - multiply = 2 } # Stuff that NEEDS to stay at the bottom. ## Vary our final tally up a bit. if = { - limit = { scope:task_contract.task_contract_employer.ai_greed != 0 } + limit = { + exists = scope:task_contract.task_contract_employer + scope:task_contract.task_contract_employer.ai_greed != 0 + } add = { value = scope:task_contract.task_contract_employer.ai_greed multiply = -0.2 } } ## Plus change the last digit around slightly so the values look a little less robotic. - scope:gold_fuzz ?= { add = scope:gold_fuzz } + if = { + limit = { exists = scope:gold_fuzz } + add = scope:gold_fuzz + } ## And boost a bit further for exceptional rewards, so that they're never beneath the common rewards. if = { - limit = { scope:gold_safety_margin ?= flag:yes } + limit = { + exists = scope:gold_safety_margin + scope:gold_safety_margin ?= flag:yes + } add = 10 } ## Shouldn't happen but just in case someone is really, really, _really_ stingy: never pay less than at least a truly pathetic amount. @@ -2468,40 +2583,52 @@ task_contract_success_gold_gain_crime_value = { multiply = task_contract_tier_gold_multiplier_value # Lifestyle perks. if = { - limit = { - scope:task_contract.task_contract_taker = { has_perk = at_any_cost_perk } + limit = { exists = scope:task_contract.task_contract_taker } + if = { + limit = { + scope:task_contract.task_contract_taker = { has_perk = at_any_cost_perk } + } + multiply = 1.25 } - multiply = 1.25 - } - if = { - limit = { - scope:task_contract.task_contract_taker = { has_perk = malice_implicit_perk } + if = { + limit = { + scope:task_contract.task_contract_taker = { has_perk = malice_implicit_perk } + } + multiply = 2 } - multiply = 2 } # Stuff that NEEDS to stay at the bottom. ## Vary our final tally up a bit. ### This time, we add _more_ gold the greedier the employer is — it's a criminal reward, so the greedier they are, the more gold they have available (albeit not to the same degree as the inverse in normal contracts). if = { - limit = { scope:task_contract.task_contract_employer.ai_greed > 1 } - add = { - value = scope:task_contract.task_contract_employer.ai_greed - multiply = 0.1 + limit = { exists = scope:task_contract.task_contract_employer } + if = { + limit = { scope:task_contract.task_contract_employer.ai_greed > 1 } + add = { + value = scope:task_contract.task_contract_employer.ai_greed + multiply = 0.1 + } } - } - ### Take it down only a marginal amount for generous chars, as we still want criminal contracts to almost always pay more. - else_if = { - limit = { scope:task_contract.task_contract_employer.ai_greed < -1 } - add = { - value = scope:task_contract.task_contract_employer.ai_greed - multiply = -0.05 + ### Take it down only a marginal amount for generous chars, as we still want criminal contracts to almost always pay more. + else_if = { + limit = { scope:task_contract.task_contract_employer.ai_greed < -1 } + add = { + value = scope:task_contract.task_contract_employer.ai_greed + multiply = -0.05 + } } } ## Plus change the last digit around slightly so the values look a little less robotic. - scope:gold_fuzz ?= { add = scope:gold_fuzz } + if = { + limit = { exists = scope:gold_fuzz } + add = scope:gold_fuzz + } ## And boost a bit further for exceptional rewards, so that they're never beneath the common rewards. if = { - limit = { scope:gold_safety_margin ?= flag:yes } + limit = { + exists = scope:gold_safety_margin + scope:gold_safety_margin = flag:yes + } add = 10 } ## Shouldn't happen but just in case someone is really, really, _really_ stingy: never pay less than at least a truly pathetic amount. @@ -2624,9 +2751,8 @@ laamp_base_2011_actual_surveyable_holdings_per_tier_value = { value = sub_realm_size every_sub_realm_barony = { limit = { - exists = holder holder.highest_held_title_tier = tier_barony - NOT = { this = root.domicile.domicile_location } + NOT = { title_province = root.domicile.domicile_location } } add = 1 } @@ -3168,6 +3294,7 @@ house_power_score = { # Add a small amount of score for each house member within the realm add = { every_house_member = { + limit = { top_liege = scope:target_house.house_head.top_liege } add = 3 } desc = members_in_realm_desc @@ -3187,10 +3314,11 @@ house_power_score = { # Add scoring for every house member on top liege's council add = { - house_head.top_liege = { + house_head.top_liege ?= { every_councillor = { limit = { - house = scope:target_house + exists = house + scope:target_house ?= house } add = 15 } @@ -3201,6 +3329,7 @@ house_power_score = { # Malus for not practicing the state faith if = { limit = { + exists = house_head NOT = { house_head.top_liege.primary_title.state_faith ?= house_head.faith } } add = { @@ -3212,11 +3341,9 @@ house_power_score = { # Estate building bonuses if = { # Market limit = { - house_head = { - domicile ?= { - has_domicile_parameter = estate_increase_powerful_family_rating - has_domicile_building_or_higher = market_05 - } + house_head.domicile ?= { + has_domicile_parameter = estate_increase_powerful_family_rating + has_domicile_building_or_higher = market_05 } } add = { @@ -3226,11 +3353,9 @@ house_power_score = { } else_if = { limit = { - house_head = { - domicile ?= { - has_domicile_parameter = estate_increase_powerful_family_rating - has_domicile_building_or_higher = market_03 - } + house_head.domicile ?= { + has_domicile_parameter = estate_increase_powerful_family_rating + has_domicile_building_or_higher = market_03 } } add = { @@ -3240,9 +3365,7 @@ house_power_score = { } else_if = { limit = { - house_head = { - domicile ?= { has_domicile_parameter = estate_increase_powerful_family_rating } - } + house_head.domicile ?= { has_domicile_parameter = estate_increase_powerful_family_rating } } add = { value = 10 @@ -3252,9 +3375,7 @@ house_power_score = { if = { # Catacombs limit = { exists = house_head.dynasty - house_head = { - domicile ?= { has_domicile_parameter = estate_powerful_family_rating_per_dynasty_level } - } + house_head.domicile ?= { has_domicile_parameter = estate_powerful_family_rating_per_dynasty_level } } add = { value = estate_increase_powerful_famil_rating_per_dynasty_level_value @@ -3266,7 +3387,7 @@ house_power_score = { # When your estate is located in the realm's capital if = { limit = { - house_head = { + house_head ?= { exists = top_liege.capital_province domicile ?= { is_domicile_type = estate @@ -3283,7 +3404,7 @@ house_power_score = { # Obligation/Theme Administration bonus if = { limit = { - house_head = { vassal_contract_has_flag = admin_prestige_obligation_bonus } + house_head ?= { vassal_contract_has_flag = admin_prestige_obligation_bonus } } add = { value = 10 @@ -3293,7 +3414,7 @@ house_power_score = { # Heart of the Family Diplomacy Lifestyle Perk if = { - limit = { house_head = { has_perk = familial_familiar_perk } } + limit = { house_head ?= { has_perk = familial_familiar_perk } } add = { value = 10 desc = familial_familiar_perk_name @@ -3303,7 +3424,7 @@ house_power_score = { # Base score increase from Power is a Ladder dynasty legacy perk if = { limit = { - house_head.dynasty = { ep3_administrative_legacy_track_perks >= 3 } + house_head.dynasty ?= { ep3_administrative_legacy_track_perks >= 3 } } add = { value = 15 @@ -3313,7 +3434,7 @@ house_power_score = { # From Mass Arrests Decision if = { - limit = { house_head = { has_character_flag = mass_arrests_house_power_malus } } + limit = { house_head ?= { has_character_flag = mass_arrests_house_power_malus } } add = { value = -15 desc = ep3_mass_arrests_house_power_malus @@ -3326,7 +3447,7 @@ house_power_score = { every_house_member = { limit = { is_governor = yes - top_liege = house.house_head.top_liege + house.house_head.top_liege ?= top_liege } add = 0.4 # Let's add a multiplier to the overall score for each governorship } @@ -3339,7 +3460,7 @@ house_power_score = { any_house_member = { is_independent_ruler = yes primary_title.tier >= tier_empire - top_liege = house.house_head.top_liege + house.house_head.top_liege ?= top_liege } } add = { @@ -3909,6 +4030,24 @@ provision_refill_value = { } multiply = 1.25 } + if = { + limit = { + scope:laamp_temp ?= { + is_ai = no + has_game_rule = hard_difficulty + } + } + multiply = 0.5 + } + else_if = { + limit = { + scope:laamp_temp ?= { + is_ai = no + has_game_rule = very_hard_difficulty + } + } + multiply = 0.2 + } } provision_refill_value_tt = { @@ -3924,6 +4063,20 @@ provision_refill_value_tt = { } multiply = 1.25 } + if = { + limit = { + is_ai = no + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = no + has_game_rule = very_hard_difficulty + } + multiply = 0.2 + } } gold_refill_value = { @@ -3943,6 +4096,47 @@ gold_refill_value = { } multiply = 1.25 } + if = { + limit = { + scope:laamp_temp ?= { + government_has_flag = government_is_nomadic + } + } + multiply = 1.5 + } + if = { + limit = { + scope:laamp_temp ?= { + is_ai = no + has_game_rule = hard_difficulty + } + } + multiply = 0.5 + } + else_if = { + limit = { + scope:laamp_temp ?= { + is_ai = no + has_game_rule = very_hard_difficulty + } + } + multiply = 0.2 + } + if = { + limit = { + trigger_if = { + limit = { exists = scope:laamp_temp } + scope:laamp_temp = { government_has_flag = government_is_nomadic } + } + trigger_else = { always = no } + } + multiply = { + add = scope:laamp_temp.martial + subtract = 8 + divide = 100 + add = 1 + } + } } gold_refill_value_tt = { @@ -3960,6 +4154,37 @@ gold_refill_value_tt = { } multiply = 1.25 } + if = { + limit = { + government_has_flag = government_is_nomadic + } + multiply = 1.5 + } + if = { + limit = { + is_ai = no + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + else_if = { + limit = { + is_ai = no + has_game_rule = very_hard_difficulty + } + multiply = 0.2 + } + if = { + limit = { + government_has_flag = government_is_nomadic + } + multiply = { + add = martial + subtract = 8 + divide = 100 + add = 1 + } + } } replenishable_troops_value = { diff --git a/common/script_values/08_bp3_values.txt b/common/script_values/08_bp3_values.txt index eea3345a..5bceacdf 100644 --- a/common/script_values/08_bp3_values.txt +++ b/common/script_values/08_bp3_values.txt @@ -27,7 +27,7 @@ max_regiment_count_plus_one = { } battle_poi_number_value = { - value = 3500 + value = 3000 if = { limit = { current_year > 1400 @@ -202,3 +202,49 @@ bosporan_kingdom_modifier_scale_value = { desc = MODIFIER_DEFINITION_BOSPORAN_KINGDOM } + +tally_current_followers = { + value = 0 + + every_courtier_or_guest = { + add = 1 + } +} + +tally_roll_of_patrons = { + value = 0 + + every_contact = { + add = 1 + } +} + +camp_pavillion_level = { + value = 0 + + if = { + limit = { + domicile ?= { has_domicile_building_or_higher = camp_main_01 } + } + add = 1 + } + else_if = { + limit = { + domicile ?= { has_domicile_building_or_higher = camp_main_02 } + } + add = 1 + } + else_if = { + limit = { + domicile ?= { has_domicile_building_or_higher = camp_main_03 } + } + add = 1 + } + else_if = { + limit = { + domicile ?= { has_domicile_building_or_higher = camp_main_04 } + } + add = 1 + } +} + diff --git a/common/script_values/09_mpo_domicile_values.txt b/common/script_values/09_mpo_domicile_values.txt new file mode 100644 index 00000000..419e735b --- /dev/null +++ b/common/script_values/09_mpo_domicile_values.txt @@ -0,0 +1,474 @@ +################### +# NOMAD YURT VALUES # +################### + +# Beware, this file is full of MATH! + +############################### +#AI VALUES + +nomadic_capital_literally_invaluable_building = { + value = 1000 +} + +nomadic_capital_extremely_important_building = { + value = 100 +} + +nomadic_capital_very_important_building = { + value = 15 +} + +nomadic_capital_main_building_1 = { + value = 8 +} + +nomadic_capital_main_building_2 = { + value = 7 + if = { + limit = { + owner = { + short_term_gold >= yurt_main_building_gold_cost_tier_2 + prestige >= yurt_main_building_prestige_cost_tier_2 + } + herd >= yurt_main_building_herd_cost_tier_2 + } + add = 4 + } + if = { + limit = { + herd >= { + value = max_herd + multiply = 0.9 + } + } + add = 5 + } +} + +nomadic_capital_main_building_3 = { + value = 6 + if = { + limit = { + owner = { + short_term_gold >= yurt_main_building_gold_cost_tier_3 + prestige >= yurt_main_building_prestige_cost_tier_3 + } + herd >= yurt_main_building_herd_cost_tier_3 + } + add = 4 + } + if = { + limit = { + herd >= { + value = max_herd + multiply = 0.9 + } + } + add = 5 + } +} + +nomadic_capital_main_building_4 = { + value = 5 + if = { + limit = { + owner = { + short_term_gold >= yurt_main_building_gold_cost_tier_4 + prestige >= yurt_main_building_prestige_cost_tier_4 + } + herd >= yurt_main_building_herd_cost_tier_4 + } + add = 4 + } + if = { + limit = { + herd >= { + value = max_herd + multiply = 0.9 + } + } + add = 5 + } +} + +nomadic_capital_main_building_5 = { + value = 4 + if = { + limit = { + owner = { + short_term_gold >= yurt_main_building_gold_cost_tier_5 + prestige >= yurt_main_building_prestige_cost_tier_5 + } + herd >= yurt_main_building_herd_cost_tier_5 + } + add = 4 + } + if = { + limit = { + herd >= { + value = max_herd + multiply = 0.9 + } + } + add = 5 + } +} + +nomadic_capital_main_building_6 = { + value = 3 + if = { + limit = { + owner = { + short_term_gold >= yurt_main_building_gold_cost_tier_6 + prestige >= yurt_main_building_prestige_cost_tier_6 + } + herd >= yurt_main_building_herd_cost_tier_6 + } + add = 4 + } + if = { + limit = { + herd >= { + value = max_herd + multiply = 0.9 + } + } + add = 5 + } +} + +nomadic_capital_interior_building_1 = { + value = 9 +} + +nomadic_capital_interior_building_2 = { + value = 8 +} + +nomadic_capital_interior_building_3 = { + value = 7 +} + +nomadic_capital_interior_building_4 = { + value = 6 +} + +nomadic_capital_interior_building_5 = { + value = 5 +} + +nomadic_capital_interior_building_6 = { + value = 4 +} + +nomadic_capital_interior_building_7 = { + value = 3 +} + +nomadic_capital_interior_building_8 = { + value = 2 +} + +nomadic_capital_exterior_building_1 = { + value = 11 +} + +nomadic_capital_exterior_building_2 = { + value = 7 +} + +nomadic_capital_exterior_building_3 = { + value = 6 +} + +nomadic_capital_exterior_building_4 = { + value = 5 +} + +nomadic_capital_exterior_building_5 = { + value = 4 +} + +nomadic_capital_exterior_building_6 = { + value = 3 +} + +nomadic_capital_exterior_building_7 = { + value = 2 +} + +nomadic_capital_exterior_building_8 = { + value = 4 +} + +################################### +# Construction Cost +# NOTE: the costs are designed with different progression. The early tiers are cheap and cost mostly herd, the higher cost more and more prestige, then skyrocket with gold cost + +# Control mult values +# They follow the equation Xn = A*X(n-1)+ B^(n-1)*(increase_value), X1 = base_value + increase_value +# Set them all to 1 to get your standard, boring like your life, linear progression + +@yurt_building_herd_mult_A = 1 +@yurt_building_herd_mult_B = 1 + +@yurt_building_prestige_mult_A = 1.1 +@yurt_building_prestige_mult_B = 0.8 + +@yurt_building_gold_mult_A = 0.6 +@yurt_building_gold_mult_B = 1.6 + +#main building control costs + +@yurt_main_building_herd_base_cost = 200 +@yurt_main_building_herd_increase_cost = 200 + +@yurt_main_building_prestige_base_cost = 40 +@yurt_main_building_prestige_increase_cost = 80 + +@yurt_main_building_gold_base_cost = 100 +@yurt_main_building_gold_increase_cost = 40 + + +#external building control costs + +@yurt_external_building_herd_base_cost = 200 +@yurt_external_building_herd_increase_cost = 100 + +@yurt_external_building_prestige_base_cost = 15 +@yurt_external_building_prestige_increase_cost = 45 + +@yurt_external_building_gold_base_cost = 0 +@yurt_external_building_gold_increase_cost = 20 + + +#internal building control costs + +@yurt_internal_building_herd_base_cost = 100 +@yurt_internal_building_herd_increase_cost = 50 + +@yurt_internal_building_prestige_base_cost = 8 +@yurt_internal_building_prestige_increase_cost = 24 + +@yurt_internal_building_gold_base_cost = 4 +@yurt_internal_building_gold_increase_cost = 8 + +################################### +# Construction herd values + +# main yurt + +@yurt_main_building_herd_cost_1 = @[yurt_main_building_herd_base_cost + yurt_main_building_herd_increase_cost] +@yurt_main_building_herd_cost_2 = @[yurt_building_herd_mult_A*yurt_main_building_herd_cost_1 + yurt_building_herd_mult_B*yurt_main_building_herd_increase_cost] +@yurt_main_building_herd_cost_3 = @[yurt_building_herd_mult_A*yurt_main_building_herd_cost_2 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_main_building_herd_increase_cost] +@yurt_main_building_herd_cost_4 = @[yurt_building_herd_mult_A*yurt_main_building_herd_cost_3 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_main_building_herd_increase_cost] +@yurt_main_building_herd_cost_5 = @[yurt_building_herd_mult_A*yurt_main_building_herd_cost_4 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_main_building_herd_increase_cost] +@yurt_main_building_herd_cost_6 = @[yurt_building_herd_mult_A*yurt_main_building_herd_cost_5 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_main_building_herd_increase_cost] + + +# external yurts + +@yurt_external_building_herd_cost_1 = @[yurt_external_building_herd_base_cost + yurt_external_building_herd_increase_cost] +@yurt_external_building_herd_cost_2 = @[yurt_building_herd_mult_A*yurt_external_building_herd_cost_1 + yurt_building_herd_mult_B*yurt_external_building_herd_increase_cost] +@yurt_external_building_herd_cost_3 = @[yurt_building_herd_mult_A*yurt_external_building_herd_cost_2 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_external_building_herd_increase_cost] +@yurt_external_building_herd_cost_4 = @[yurt_building_herd_mult_A*yurt_external_building_herd_cost_3 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_external_building_herd_increase_cost] +@yurt_external_building_herd_cost_5 = @[yurt_building_herd_mult_A*yurt_external_building_herd_cost_4 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_external_building_herd_increase_cost] +@yurt_external_building_herd_cost_6 = @[yurt_building_herd_mult_A*yurt_external_building_herd_cost_5 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_external_building_herd_increase_cost] + + +# internal yurts + +@yurt_internal_building_herd_cost_1 = @[yurt_internal_building_herd_base_cost + yurt_internal_building_herd_increase_cost] +@yurt_internal_building_herd_cost_2 = @[yurt_building_herd_mult_A*yurt_internal_building_herd_cost_1 + yurt_building_herd_mult_B*yurt_internal_building_herd_increase_cost] +@yurt_internal_building_herd_cost_3 = @[yurt_building_herd_mult_A*yurt_internal_building_herd_cost_2 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_internal_building_herd_increase_cost] +@yurt_internal_building_herd_cost_4 = @[yurt_building_herd_mult_A*yurt_internal_building_herd_cost_3 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_internal_building_herd_increase_cost] +@yurt_internal_building_herd_cost_5 = @[yurt_building_herd_mult_A*yurt_internal_building_herd_cost_4 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_internal_building_herd_increase_cost] +@yurt_internal_building_herd_cost_6 = @[yurt_building_herd_mult_A*yurt_internal_building_herd_cost_5 + yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_building_herd_mult_B*yurt_internal_building_herd_increase_cost] + +################################### +# Construction prestige values + +# main yurt + +@yurt_main_building_prestige_cost_1 = @[yurt_main_building_prestige_base_cost + yurt_main_building_prestige_increase_cost] +@yurt_main_building_prestige_cost_2 = @[yurt_building_prestige_mult_A*yurt_main_building_prestige_cost_1 + yurt_building_prestige_mult_B*yurt_main_building_prestige_increase_cost] +@yurt_main_building_prestige_cost_3 = @[yurt_building_prestige_mult_A*yurt_main_building_prestige_cost_2 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_main_building_prestige_increase_cost] +@yurt_main_building_prestige_cost_4 = @[yurt_building_prestige_mult_A*yurt_main_building_prestige_cost_3 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_main_building_prestige_increase_cost] +@yurt_main_building_prestige_cost_5 = @[yurt_building_prestige_mult_A*yurt_main_building_prestige_cost_4 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_main_building_prestige_increase_cost] +@yurt_main_building_prestige_cost_6 = @[yurt_building_prestige_mult_A*yurt_main_building_prestige_cost_5 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_main_building_prestige_increase_cost] + + +# external yurts + +@yurt_external_building_prestige_cost_1 = @[yurt_external_building_prestige_base_cost + yurt_external_building_prestige_increase_cost] +@yurt_external_building_prestige_cost_2 = @[yurt_building_prestige_mult_A*yurt_external_building_prestige_cost_1 + yurt_building_prestige_mult_B*yurt_external_building_prestige_increase_cost] +@yurt_external_building_prestige_cost_3 = @[yurt_building_prestige_mult_A*yurt_external_building_prestige_cost_2 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_external_building_prestige_increase_cost] +@yurt_external_building_prestige_cost_4 = @[yurt_building_prestige_mult_A*yurt_external_building_prestige_cost_3 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_external_building_prestige_increase_cost] +@yurt_external_building_prestige_cost_5 = @[yurt_building_prestige_mult_A*yurt_external_building_prestige_cost_4 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_external_building_prestige_increase_cost] +@yurt_external_building_prestige_cost_6 = @[yurt_building_prestige_mult_A*yurt_external_building_prestige_cost_5 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_external_building_prestige_increase_cost] + + +# internal yurts + +@yurt_internal_building_prestige_cost_1 = @[yurt_internal_building_prestige_base_cost + yurt_internal_building_prestige_increase_cost] +@yurt_internal_building_prestige_cost_2 = @[yurt_building_prestige_mult_A*yurt_internal_building_prestige_cost_1 + yurt_building_prestige_mult_B*yurt_internal_building_prestige_increase_cost] +@yurt_internal_building_prestige_cost_3 = @[yurt_building_prestige_mult_A*yurt_internal_building_prestige_cost_2 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_internal_building_prestige_increase_cost] +@yurt_internal_building_prestige_cost_4 = @[yurt_building_prestige_mult_A*yurt_internal_building_prestige_cost_3 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_internal_building_prestige_increase_cost] +@yurt_internal_building_prestige_cost_5 = @[yurt_building_prestige_mult_A*yurt_internal_building_prestige_cost_4 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_internal_building_prestige_increase_cost] +@yurt_internal_building_prestige_cost_6 = @[yurt_building_prestige_mult_A*yurt_internal_building_prestige_cost_5 + yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_building_prestige_mult_B*yurt_internal_building_prestige_increase_cost] + + +################################### +# Construction gold values + +# main yurt + +@yurt_main_building_gold_cost_1 = @[yurt_main_building_gold_base_cost + yurt_main_building_gold_increase_cost] +@yurt_main_building_gold_cost_2 = @[yurt_building_gold_mult_A*yurt_main_building_gold_cost_1 + yurt_building_gold_mult_B*yurt_main_building_gold_increase_cost] +@yurt_main_building_gold_cost_3 = @[yurt_building_gold_mult_A*yurt_main_building_gold_cost_2 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_main_building_gold_increase_cost] +@yurt_main_building_gold_cost_4 = @[yurt_building_gold_mult_A*yurt_main_building_gold_cost_3 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_main_building_gold_increase_cost] +@yurt_main_building_gold_cost_5 = @[yurt_building_gold_mult_A*yurt_main_building_gold_cost_4 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_main_building_gold_increase_cost] +@yurt_main_building_gold_cost_6 = @[yurt_building_gold_mult_A*yurt_main_building_gold_cost_5 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_main_building_gold_increase_cost] + + +# external yurts + +@yurt_external_building_gold_cost_1 = @[yurt_external_building_gold_base_cost + yurt_external_building_gold_increase_cost] +@yurt_external_building_gold_cost_2 = @[yurt_building_gold_mult_A*yurt_external_building_gold_cost_1 + yurt_building_gold_mult_B*yurt_external_building_gold_increase_cost] +@yurt_external_building_gold_cost_3 = @[yurt_building_gold_mult_A*yurt_external_building_gold_cost_2 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_external_building_gold_increase_cost] +@yurt_external_building_gold_cost_4 = @[yurt_building_gold_mult_A*yurt_external_building_gold_cost_3 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_external_building_gold_increase_cost] +@yurt_external_building_gold_cost_5 = @[yurt_building_gold_mult_A*yurt_external_building_gold_cost_4 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_external_building_gold_increase_cost] +@yurt_external_building_gold_cost_6 = @[yurt_building_gold_mult_A*yurt_external_building_gold_cost_5 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_external_building_gold_increase_cost] + + +# internal yurts + +@yurt_internal_building_gold_cost_1 = @[yurt_internal_building_gold_base_cost + yurt_internal_building_gold_increase_cost] +@yurt_internal_building_gold_cost_2 = @[yurt_building_gold_mult_A*yurt_internal_building_gold_cost_1 + yurt_building_gold_mult_B*yurt_internal_building_gold_increase_cost] +@yurt_internal_building_gold_cost_3 = @[yurt_building_gold_mult_A*yurt_internal_building_gold_cost_2 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_internal_building_gold_increase_cost] +@yurt_internal_building_gold_cost_4 = @[yurt_building_gold_mult_A*yurt_internal_building_gold_cost_3 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_internal_building_gold_increase_cost] +@yurt_internal_building_gold_cost_5 = @[yurt_building_gold_mult_A*yurt_internal_building_gold_cost_4 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_internal_building_gold_increase_cost] +@yurt_internal_building_gold_cost_6 = @[yurt_building_gold_mult_A*yurt_internal_building_gold_cost_5 + yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_building_gold_mult_B*yurt_internal_building_gold_increase_cost] + + + +################################### +# Getting the final values, no calculations + +yurt_main_building_herd_cost_tier_1 = @yurt_main_building_herd_cost_1 +yurt_main_building_herd_cost_tier_2 = @yurt_main_building_herd_cost_2 +yurt_main_building_herd_cost_tier_3 = @yurt_main_building_herd_cost_3 +yurt_main_building_herd_cost_tier_4 = @yurt_main_building_herd_cost_4 +yurt_main_building_herd_cost_tier_5 = @yurt_main_building_herd_cost_5 +yurt_main_building_herd_cost_tier_6 = @yurt_main_building_herd_cost_6 + +yurt_external_building_herd_cost_tier_1 = @yurt_external_building_herd_cost_1 +yurt_external_building_herd_cost_tier_2 = @yurt_external_building_herd_cost_2 +yurt_external_building_herd_cost_tier_3 = @yurt_external_building_herd_cost_3 +yurt_external_building_herd_cost_tier_4 = @yurt_external_building_herd_cost_4 +yurt_external_building_herd_cost_tier_5 = @yurt_external_building_herd_cost_5 +yurt_external_building_herd_cost_tier_6 = @yurt_external_building_herd_cost_6 + +yurt_internal_building_herd_cost_tier_1 = @yurt_internal_building_herd_cost_1 +yurt_internal_building_herd_cost_tier_2 = @yurt_internal_building_herd_cost_2 +yurt_internal_building_herd_cost_tier_3 = @yurt_internal_building_herd_cost_3 +yurt_internal_building_herd_cost_tier_4 = @yurt_internal_building_herd_cost_4 +yurt_internal_building_herd_cost_tier_5 = @yurt_internal_building_herd_cost_5 +yurt_internal_building_herd_cost_tier_6 = @yurt_internal_building_herd_cost_6 + +yurt_main_building_prestige_cost_tier_1 = @yurt_main_building_prestige_cost_1 +yurt_main_building_prestige_cost_tier_2 = @yurt_main_building_prestige_cost_2 +yurt_main_building_prestige_cost_tier_3 = @yurt_main_building_prestige_cost_3 +yurt_main_building_prestige_cost_tier_4 = @yurt_main_building_prestige_cost_4 +yurt_main_building_prestige_cost_tier_5 = @yurt_main_building_prestige_cost_5 +yurt_main_building_prestige_cost_tier_6 = @yurt_main_building_prestige_cost_6 + +yurt_external_building_prestige_cost_tier_1 = @yurt_external_building_prestige_cost_1 +yurt_external_building_prestige_cost_tier_2 = @yurt_external_building_prestige_cost_2 +yurt_external_building_prestige_cost_tier_3 = @yurt_external_building_prestige_cost_3 +yurt_external_building_prestige_cost_tier_4 = @yurt_external_building_prestige_cost_4 +yurt_external_building_prestige_cost_tier_5 = @yurt_external_building_prestige_cost_5 +yurt_external_building_prestige_cost_tier_6 = @yurt_external_building_prestige_cost_6 + +yurt_internal_building_prestige_cost_tier_1 = @yurt_internal_building_prestige_cost_1 +yurt_internal_building_prestige_cost_tier_2 = @yurt_internal_building_prestige_cost_2 +yurt_internal_building_prestige_cost_tier_3 = @yurt_internal_building_prestige_cost_3 +yurt_internal_building_prestige_cost_tier_4 = @yurt_internal_building_prestige_cost_4 +yurt_internal_building_prestige_cost_tier_5 = @yurt_internal_building_prestige_cost_5 +yurt_internal_building_prestige_cost_tier_6 = @yurt_internal_building_prestige_cost_6 + +yurt_main_building_gold_cost_tier_1 = { + value = @yurt_main_building_gold_cost_1 + +} +yurt_main_building_gold_cost_tier_2 = { + value = @yurt_main_building_gold_cost_2 + +} +yurt_main_building_gold_cost_tier_3 = { + value = @yurt_main_building_gold_cost_3 + +} +yurt_main_building_gold_cost_tier_4 = { + value = @yurt_main_building_gold_cost_4 + +} +yurt_main_building_gold_cost_tier_5 = { + value = @yurt_main_building_gold_cost_5 + +} +yurt_main_building_gold_cost_tier_6 = { + value = @yurt_main_building_gold_cost_6 + +} + +yurt_external_building_gold_cost_tier_1 = { + value = @yurt_external_building_gold_cost_1 + +} +yurt_external_building_gold_cost_tier_2 = { + value = @yurt_external_building_gold_cost_2 + +} +yurt_external_building_gold_cost_tier_3 = { + value = @yurt_external_building_gold_cost_3 + +} +yurt_external_building_gold_cost_tier_4 = { + value = @yurt_external_building_gold_cost_4 + +} +yurt_external_building_gold_cost_tier_5 = { + value = @yurt_external_building_gold_cost_5 + +} +yurt_external_building_gold_cost_tier_6 = { + value = @yurt_external_building_gold_cost_6 + +} + +yurt_internal_building_gold_cost_tier_1 = { + value = @yurt_internal_building_gold_cost_1 + +} +yurt_internal_building_gold_cost_tier_2 = { + value = @yurt_internal_building_gold_cost_2 + +} +yurt_internal_building_gold_cost_tier_3 = { + value = @yurt_internal_building_gold_cost_3 + +} +yurt_internal_building_gold_cost_tier_4 = { + value = @yurt_internal_building_gold_cost_4 + +} +yurt_internal_building_gold_cost_tier_5 = { + value = @yurt_internal_building_gold_cost_5 + +} +yurt_internal_building_gold_cost_tier_6 = { + value = @yurt_internal_building_gold_cost_6 + +} diff --git a/common/script_values/09_mpo_the_great_steppe_values.txt b/common/script_values/09_mpo_the_great_steppe_values.txt new file mode 100644 index 00000000..99b740c0 --- /dev/null +++ b/common/script_values/09_mpo_the_great_steppe_values.txt @@ -0,0 +1,5 @@ +# Catalyst values +minor_the_great_steppe_catalyst_gain = 15 +medium_the_great_steppe_catalyst_gain = 100 +major_the_great_steppe_catalyst_gain = 250 +massive_the_great_steppe_catalyst_gain = 500 \ No newline at end of file diff --git a/common/script_values/09_mpo_values.txt b/common/script_values/09_mpo_values.txt new file mode 100644 index 00000000..b417a054 --- /dev/null +++ b/common/script_values/09_mpo_values.txt @@ -0,0 +1,2866 @@ +# Migration values +migration_cooldown_value = 5 # Years + +# Temp Tributary Protection after winning a war +temp_tributary_protection_value = 3 # Years + +#ratio between attacker's military strength and defender's strength +confederation_worthy_foe_strength_ratio_value = { + value = scope:confederate.max_military_strength + divide = max_military_strength_plus_one_value +} + +confederation_worthy_foe_strength_ratio_value_root = { + value = root.max_military_strength + divide = max_military_strength_plus_one_value +} + +max_military_strength_plus_one_value = { + value = max_military_strength + add = 1 +} + +confederation_cb_cost_display_value = 200 +confederation_cb_cost_value = { + value = 1 + add = { + value = confederation_cb_cost_display_value + divide = 100 + } +} + +#ratio between attacker's military strength and defender's strength +blood_brother_strength_ratio_value = { + value = scope:actor.max_military_strength + divide = { + value = scope:recipient.max_military_strength + min = 1 + } +} +## Herd Values ## +# Used by Code, do not rename or remove +# Used to initialize how much Herd a nomad gets upon getting a domicile +# root = domicile owner, aka the ruling nomad leader +initial_nomad_herd = { + value = 0 + add = { + #ADDITIVE SOURCES + add = { + value = current_domain_fertility + multiply = 8 + } + every_vassal = { + limit = { + government_has_flag = government_is_nomadic + } + add = { + value = 0 + add = { + value = current_domain_fertility + multiply = 4 + } + every_vassal = { + limit = { + government_has_flag = government_is_nomadic + } + add = { + value = current_domain_fertility + multiply = 2 + } + } + multiply = { + value = 140 + add = "this.opinion(root)" + add = root.dread + multiply = 0.01 + min = 0 + max = 2 + } + multiply = primary_title.tier + multiply = 0.2 + min = 100 + max = 4000 + } + } + every_vassal = { + limit = { + government_has_flag = government_is_herder + } + add = { + value = current_domain_fertility + multiply = 4 + } + } + every_tributary = { + add = { + value = realm_size + multiply = primary_title.tier + multiply = 10 + min = 100 + max = 2000 + } + } + } +} + +# This will randomly be added on top of the initial nomad herd depending on your title tier +# This is the lower range +# root = domicile owner, aka the ruling nomad leader +initial_nomad_herd_title_min = { + value = 0 + add = { + switch = { + trigger = primary_title.tier + tier_barony = { + value = 100 + } + tier_county = { + value = 250 + } + tier_duchy = { + value = 750 + } + tier_kingdom = { + value = 1250 + } + tier_empire = { + value = 2500 + } + } + } +} + +# This will randomly be added on top of the initial nomad herd depending on your title tier +# This is the upper range +# root = domicile owner, aka the ruling nomad leader +initial_nomad_herd_title_max = { + value = 0 + add = { + switch = { + trigger = primary_title.tier + tier_barony = { + value = 200 + } + tier_county = { + value = 500 + } + tier_duchy = { + value = 1500 + } + tier_kingdom = { + value = 2500 + } + tier_empire = { + value = 5000 + } + } + } +} + +# Used on game start to give Nomads some starting gold +gold_value_scale_by_era = { + value = 0 + if = { + limit = { + culture = { has_cultural_era_or_later = culture_era_late_medieval } + } + add = 3 + } + else_if = { + limit = { + culture = { has_cultural_era_or_later = culture_era_high_medieval } + } + add = 1.5 + } + else_if = { + limit = { + culture = { has_cultural_era_or_later = culture_era_early_medieval } + } + add = 1 + } + else = { + add = 0.75 + } +} + + +# Dynamic Herd values +# START of use only with a domicile scope +herd_value_scale_by_era = { + value = 0 + if = { + limit = { + owner.culture ?= { has_cultural_era_or_later = culture_era_late_medieval } + } + add = 1.75 + } + else_if = { + limit = { + owner.culture ?= { has_cultural_era_or_later = culture_era_high_medieval } + } + add = 1.25 + } + else_if = { + limit = { + owner.culture ?= { has_cultural_era_or_later = culture_era_early_medieval } + } + add = 1 + } + else = { + add = 0.75 + } +} + +herd_value_scale_by_tier = { + value = 0 + if = { + limit = { exists = owner.primary_title } + add = { + value = owner.primary_title.tier + subtract = 1 + } + multiply = 0.5 + } + min = 1 +} + +herd_value_scale_owner_dominance = { + value = owner.dominance_value + multiply = 0.5 + min = 1 +} + +miniscule_herd_value_static = 25 +miniscule_herd_value = { + value = miniscule_herd_value_static + multiply = herd_value_scale_by_era + multiply = herd_value_scale_by_tier + multiply = herd_value_scale_owner_dominance +} + +minor_herd_value_static = 150 +minor_herd_value = { + value = minor_herd_value_static + multiply = herd_value_scale_by_era + multiply = herd_value_scale_by_tier + multiply = herd_value_scale_owner_dominance +} + +medium_herd_value_static = 300 +medium_herd_value = { + value = medium_herd_value_static + multiply = herd_value_scale_by_era + multiply = herd_value_scale_by_tier + multiply = herd_value_scale_owner_dominance +} + +major_herd_value_static = 600 +major_herd_value = { + value = major_herd_value_static + multiply = herd_value_scale_by_era + multiply = herd_value_scale_by_tier + multiply = herd_value_scale_owner_dominance +} + +massive_herd_value_static = 1200 +massive_herd_value = { + value = massive_herd_value_static + multiply = herd_value_scale_by_era + multiply = herd_value_scale_by_tier + multiply = owner.dominance_value +} + +monumental_herd_value_static = 2400 +monumental_herd_value = { + value = monumental_herd_value_static + multiply = herd_value_scale_by_era + multiply = herd_value_scale_by_tier + multiply = owner.dominance_value +} + +miniscule_herd_loss = { + value = 0 + subtract = miniscule_herd_value +} +minor_herd_loss = { + value = 0 + subtract = minor_herd_value +} +medium_herd_loss = { + value = 0 + subtract = medium_herd_value +} +major_herd_loss = { + value = 0 + subtract = major_herd_value +} +massive_herd_loss = { + value = 0 + subtract = massive_herd_value +} +monumental_herd_loss = { + value = 0 + subtract = monumental_herd_value +} + +miniscule_herd_gain = { + value = 0 + add = miniscule_herd_value +} +minor_herd_gain = { + value = 0 + add = minor_herd_value +} +medium_herd_gain = { + value = 0 + add = medium_herd_value +} +major_herd_gain = { + value = 0 + add = major_herd_value +} +massive_herd_gain = { + value = 0 + add = massive_herd_value +} +monumental_herd_gain = { + value = 0 + add = monumental_herd_value +} + +five_percent_herd_value = { + value = max_herd + multiply = 0.05 +} +ten_percent_herd_value = { + value = max_herd + multiply = 0.1 +} +fifteen_percent_herd_value = { + value = max_herd + multiply = 0.15 +} +twenty_percent_herd_value = { + value = max_herd + multiply = 0.2 +} +twentyfive_percent_herd_value = { + value = max_herd + multiply = 0.25 +} +thirty_percent_herd_value = { + value = max_herd + multiply = 0.3 +} +forty_percent_herd_value = { + value = max_herd + multiply = 0.4 +} +fifty_percent_herd_value = { + value = max_herd + multiply = 0.5 +} +sixty_percent_herd_value = { + value = max_herd + multiply = 0.6 +} +seventy_percent_herd_value = { + value = max_herd + multiply = 0.7 +} +eighty_percent_herd_value = { + value = max_herd + multiply = 0.8 +} +ninety_percent_herd_value = { + value = max_herd + multiply = 0.9 +} + +five_percent_current_herd_value = { + value = herd + multiply = 0.05 +} +ten_percent_current_herd_value = { + value = herd + multiply = 0.1 +} +fifteen_percent_current_herd_value = { + value = herd + multiply = 0.15 +} +twenty_percent_current_herd_value = { + value = herd + multiply = 0.2 +} +twentyfive_percent_current_herd_value = { + value = herd + multiply = 0.25 +} +thirty_percent_current_herd_value = { + value = herd + multiply = 0.3 +} +forty_percent_current_herd_value = { + value = herd + multiply = 0.4 +} +fifty_percent_current_herd_value = { + value = herd + multiply = 0.5 +} +sixty_percent_current_herd_value = { + value = herd + multiply = 0.6 +} +seventy_percent_current_herd_value = { + value = herd + multiply = 0.7 +} +eighty_percent_current_herd_value = { + value = herd + multiply = 0.8 +} +ninety_percent_current_herd_value = { + value = herd + multiply = 0.9 +} + +negative_seventy_five_percent_herd_value = { + value = herd + multiply = -0.75 +} + +ask_for_herd_base_value = { + value = 0 + switch = { + trigger = owner.primary_title.tier + tier_barony = { add = miniscule_herd_value } + tier_county = { add = minor_herd_value} + tier_duchy = { add = minor_herd_value } + tier_kingdom = { add = medium_herd_value } + tier_empire = { add = medium_herd_value } + } +} + +ask_for_herd_double_value = { + value = ask_for_herd_base_value + multiply = 2 +} + +ask_for_herd_half_value = { + value = ask_for_herd_base_value + multiply = 0.5 +} +# END of use only with domicile scope + +# START of use only with a character scope +dominance_value = { + value = 0 + if = { + limit = { government_has_flag = government_is_nomadic } + switch = { + trigger = has_realm_law + nomadic_authority_1 = { + add = 1 + } + nomadic_authority_2 = { + add = 2 + } + nomadic_authority_3 = { + add = 3 + } + nomadic_authority_4 = { + add = 4 + } + nomadic_authority_5 = { + add = 5 + } + } + } + + min = 1 +} + +excess_herd_value = { + value = domicile.herd + subtract = domicile.max_herd +} + +excess_herd_value_negative = { + value = domicile.max_herd + subtract = domicile.herd +} + +nomadic_authority_requirement_scale_by_era = { + value = 0 + if = { + limit = { + exists = culture + } + culture = { + if = { + limit = { + has_cultural_era_or_later = culture_era_late_medieval + } + add = 3 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_high_medieval + } + add = 1.5 + } + else_if = { + limit = { + has_cultural_era_or_later = culture_era_early_medieval + } + add = 1 + } + else = { + add = 0.75 + } + } + } +} + +nomadic_authority_level_2_requirement = 2500 + +nomadic_authority_level_3_requirement = 10000 + +nomadic_authority_level_4_requirement = 30000 + +nomadic_authority_level_5_requirement = 75000 +# END of use only with character scope + +hunting_eagle_sell_value = { + value = 24 + if = { # They are pretty valuable + limit = { + is_landless_adventurer = yes + } + add = massive_gold_laamps_value + } + else = { + add = massive_gold_value + } + if = { # The younger, the better + limit = { + has_variable = eagle_age_variable + } + subtract = { + value = { + add = var:eagle_age_variable + multiply = 4 + } + } + } + if = { # Developed pets are worth more + limit = { + has_eagle_personality_trait_trigger = yes + } + multiply = { + value = { + add = 1.2 + add = { #0.2 per level + value = 0.2 + multiply = var:eagle_personality_level + } + } + } + if = { + limit = { + has_secondary_eagle_personality_trait_trigger = yes + } + multiply = 1.25 + } + } + if = { # Weak pets are worth less + limit = { + has_character_modifier = weak_eagle_modifier + } + multiply = 0.75 + } + if = { # Very weak pets are worth less + limit = { + has_character_modifier = very_weak_eagle_modifier + } + multiply = 0.5 + } + if = { + limit = { # Can't get an eagle from a non-steppe location + NOT = { location = { geographical_region = world_steppe } } + } + multiply = 2 + } + #Better buyers in City Holding + if = { + limit = { + location = { has_holding_type = city_holding } + } + multiply = { 1.15 1.25 } + } + # Some variance + multiply = { 0.8 1.1 } +} + +nomad_contract_cooldown_value = 5 + +study_commander_trait_success_chance_very_good_value = 80 +study_commander_trait_success_chance_good_value = 60 +study_commander_trait_success_chance_fair_value = 40 +study_commander_trait_success_chance_poor_value = 20 + +study_commander_trait_success_chance_value = { + value = 40 + + if = { # More likely to succeed if you've done it more times + limit = { + has_variable = study_commander_trait_tally + } + add = { + value = var:study_commander_trait_tally + multiply = 5 + } + } + + # Traits + if = { + limit = { + has_trait = diligent + } + add = 5 + } + if = { + limit = { + has_trait = lazy + } + add = -5 + } + if = { + limit = { + has_trait = intellect_bad + } + add = -10 + } + if = { + limit = { + has_wounds_trigger = yes + } + add = -10 + } + if = { + limit = { + has_any_illness = yes + } + add = -10 + } + if = { + limit = { + has_any_debilitating_illness = yes + } + add = -10 + } + if = { + limit = { + has_trait = education_martial + } + add = 5 + } + + #Other + if = { + limit = { + culture = { has_cultural_pillar = ethos_bellicose } + } + add = 5 + } + if = { + limit = { + has_variable = study_commander_trait_success_chance_var + } + add = var:study_commander_trait_success_chance_var + } + + max = 99 + min = 1 +} + +study_commander_trait_success_chance_value_neg = { + value = study_commander_trait_success_chance_value + multiply = -1 +} + +study_commander_trait_mentor_hire_cost = { + value = 15 + + add = { + value = number_of_commander_traits + multiply = 5 + } + + add = { + value = martial + multiply = 2 + } + + if = { + limit = { + has_character_flag = commander_trait_mentor + } + multiply = 0.5 # Cheaper to hire + } +} + +##### Fertility ##### + +#Levels values +terrible_county_fertility_level = 10 +bad_county_fertility_level = 20 +medium_county_fertility_level = 40 +good_county_fertility_level = 60 +great_county_fertility_level = 80 +max_county_fertility_level = 100 + +#Change Values +tiny_county_fertility_level_loss = -5 +minor_county_fertility_level_loss = -10 +medium_county_fertility_level_loss = -20 +major_county_fertility_level_loss = -30 +tiny_county_fertility_level_gain = 5 +minor_county_fertility_level_gain = 10 +medium_county_fertility_level_gain = 20 +major_county_fertility_level_gain = 30 + +#Growth Values +tiny_county_fertility_growth_gain = 0.05 +small_county_fertility_growth_gain = 0.1 +medium_county_fertility_growth_gain = 0.2 +large_county_fertility_growth_gain = 0.3 +very_large_county_fertility_growth_gain = 0.5 + +tiny_county_fertility_growth_loss = -0.1 +small_county_fertility_growth_loss = -0.2 +medium_county_fertility_growth_loss = -0.3 +large_county_fertility_growth_loss = -0.5 +very_large_county_fertility_growth_loss = -0.8 +fertility_dance_bonus_value = { + value = minor_county_fertility_level_gain + + # Based on the county's fertility level + # No bonuses if higher than 60 + if = { + limit = { + county_fertility <= bad_county_fertility_level + } + multiply = 2.5 + } + else_if = { + limit = { + county_fertility <= medium_county_fertility_level + } + multiply = 2 + } + else_if = { + limit = { + county_fertility <= good_county_fertility_level + } + multiply = 1.5 + } + + # Based on the shaman's learning skill + add = { + add = 1 + add = { + value = holder.court_position:court_astrologer_court_position.learning + multiply = 0.3 + } + } + + #Based on the player's piety level + multiply = { + add = 1 + add = { + value = holder.piety_level + multiply = 0.2 + } + } + + max = { + value = 100 + subtract = county_fertility + } +} +fertility_dance_bonus_growth_value = { + value = 1 + + # Based on the county's fertility level + # No bonuses if higher than 60 + if = { + limit = { + county_fertility <= bad_county_fertility_level + } + multiply = 2.5 + } + else_if = { + limit = { + county_fertility <= medium_county_fertility_level + } + multiply = 2 + } + else_if = { + limit = { + county_fertility <= good_county_fertility_level + } + multiply = 1.5 + } + + # Based on the shaman's learning skill + add = { + add = 1 + add = { + value = holder.court_position:court_astrologer_court_position.learning + multiply = 0.3 + } + } + + #Based on the player's learning skill + add = { + add = 1 + add = { + value = holder.learning + multiply = 0.3 + } + } +} + +mpo_paiza_abuse_khan_reaction_value = { + value = 0 + add = { + value = "scope:paiza_patron.opinion(scope:paiza_abuser)" + divide = 10 + } + add = { + value = scope:paiza_patron.max_military_strength + subtract = scope:paiza_abuser.max_military_strength + divide = scope:paiza_patron.max_military_strength + multiply = 10 + } + +} + +mpo_introduce_heir_prestige_cost = medium_prestige_value +mpo_introduce_heir_piety_cost = major_piety_value + +age_compared_to_player_heir = { + add = age + subtract = root.player_heir.age +} + +mpo_friendship_setup_positive_modifiers_value = { + value = 0 + if = { + limit = { + scope:friendship_target = { + opinion = { + target = scope:heir + value >= 25 + } + } + } + add = 40 + } + if = { + limit = { + scope:friendship_target = { + opinion = { + target = scope:heir + value >= 75 + } + } + } + add = 60 + } + if = { + limit = { + scope:friendship_target = { + is_allied_to = root + } + } + add = 30 + } + if = { + limit = { + scope:friendship_target = { + OR = { + culture = { + this = scope:heir.culture + } + culture = { + cultural_acceptance = { + target = scope:heir.culture + value >= 80 + } + } + } + } + } + add = 40 + } + if = { + limit = { + scope:friendship_target = { + AND = { + exists = house + exists = scope:heir.house + house = { + this = root.house + } + } + } + } + add = 40 + } + if = { + limit = { + scope:friendship_target = { + OR = { + has_relation_friend = root + has_relation_best_friend = root + has_relation_soulmate = root + has_relation_lover = root + has_relation_blood_brother = root + } + } + } + add = 40 + } +} + +mpo_friendship_setup_negative_modifiers_value = { + value = 0 + if = { + limit = { + scope:friendship_target = { + highest_held_title_tier >= tier_empire + } + } + add = 40 + } + if = { + limit = { + scope:friendship_target = { + highest_held_title_tier >= tier_kingdom + } + } + add = 40 + } + if = { + limit = { + scope:friendship_target = { + OR = { + age_compared_to_player_heir >= 20 + age_compared_to_player_heir <= -20 + } + } + } + add = 40 + } + if = { + limit = { + scope:friendship_target = { + save_temporary_scope_as = temp_target + NOR = { + knows_language_of_culture = scope:heir.culture + scope:heir = { + knows_language_of_culture = scope:temp_target.culture + } + } + } + } + add = 60 + } + if = { + limit = { + scope:friendship_target = { + opinion = { + target = scope:heir + value <= 0 + } + opinion = { + target = scope:heir + value > -40 + } + } + } + add = 60 + } + if = { + limit = { + scope:friendship_target = { + opinion = { + target = scope:heir + value < -40 + } + } + } + add = 200 + } +} + +mpo_convert_capital_duchy_nomad_value = { + value = 0 + if = { + limit = { + capital_county.kingdom = { + any_de_jure_county = { + count >= 20 + OR = { + holder.liege = { + this = root + } + holder = root + holder.top_liege = { + this = root + } + } + } + } + } + add = 100 + } + if = { + limit = { + capital_county.kingdom = { + any_de_jure_county = { + count >= 35 + OR = { + holder.liege = { + this = root + } + holder = root + holder.top_liege = { + this = root + } + } + } + } + } + add = 100 + } + if = { + limit = { + capital_county.kingdom = { + any_de_jure_county = { + count >= 50 + OR = { + holder.liege = { + this = root + } + holder = root + holder.top_liege = { + this = root + } + } + } + } + } + add = 100 + } +} + +mpo_introduce_heir_prestige_cost = medium_prestige_value +mpo_introduce_heir_piety_cost = major_piety_value + +age_compared_to_player_heir = { + add = age + subtract = root.player_heir.age +} + +odds_steal_herd_scheme_misc_value = { + value = 10 + add = { + value = 0 + desc = scheme_odds.misc_modifiers + + if = { + limit = { + scope:target = { + has_opinion_modifier = { + target = scope:owner + modifier = attempted_to_steal_herd_crime + } + } + } + add = -50 + } + } + + add = { + value = scope:owner.prowess + desc = scheme_odds.prowess.owner + } + + if = { + limit = { + scope:owner = { has_trait = gallowsbait } + } + add = { + value = 10 + desc = SCHEME_STEAL_HERD_GALLOWSBAIT + } + } + + # If it's a herder, even though you probably shouldn't be stealing from them anyways + if = { + limit = { + scope:target = { + government_has_flag = government_is_herder + } + } + add = { + value = -10 + desc = scheme_odds.misc_is_herder + } + } +} + +odds_steal_herd_scheme_misc_value = { + value = 10 + add = { + value = 0 + desc = scheme_odds.misc_modifiers + + if = { + limit = { + scope:target = { + has_opinion_modifier = { + target = scope:owner + modifier = attempted_to_steal_herd_crime + } + } + } + add = -50 + } + } + + add = { + value = scope:owner.prowess + desc = scheme_odds.prowess.owner + } + + if = { + limit = { + scope:owner = { has_trait = gallowsbait } + } + add = { + value = 10 + desc = SCHEME_STEAL_HERD_GALLOWSBAIT + } + } + + # If it's a herder, even though you probably shouldn't be stealing from them anyways + if = { + limit = { + scope:target = { + government_has_flag = government_is_herder + } + } + add = { + value = -10 + desc = scheme_odds.misc_is_herder + } + } +} + +mpo_tsagaan_sar_gift_likely_value = { + value = 25 + + # Vassals should always gift + if = { + limit = { + is_vassal_of = scope:host + } + add = 20 + + if = { + limit = { + is_powerful_vassal_of = scope:host + } + add = 10 + } + } + + # Employees should gift + if = { + limit = { + is_councillor_of = scope:host + } + add = 25 + } + if = { + limit = { + is_courtier_of = scope:host + has_any_court_position = yes + } + add = 15 + } + + # Don't want to piss him/her off + if = { + limit = { + has_dread_level_towards = { + target = scope:host + level = 1 + } + } + add = 25 + } + + if = { + limit = { + has_dread_level_towards = { + target = scope:host + level = 2 + } + } + add = 35 + } + + # Relation + if = { + limit = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:host } + } + add = 15 + + if = { + limit = { + likes_character_trigger = { CHARACTER = scope:host } + } + add = 10 + } + } + + if = { + limit = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:host } + } + + add = -10 + + if = { + limit = { + has_relation_rival = scope:host + } + add = -10 + } + + if = { + limit = { + has_relation_nemesis = scope:host + } + add = -20 + } + } + + if = { + limit = { + is_any_family_relation_or_spouse_trigger = { CHARACTER = scope:host } + } + add = 15 + } + + # Respect + if = { + limit = { + has_opinion_modifier = { + modifier = respect_opinion + target = scope:host + } + } + add = 5 + } + + if = { + limit = { + has_opinion_modifier = { + modifier = disrespect_opinion + target = scope:host + } + } + add = -5 + } + + if = { + limit = { + is_allied_to = scope:host + } + add = 10 + } + + # Personality + if = { + limit = { + has_trait = generous + } + add = 25 + } + + if = { + limit = { + OR = { + has_trait = greedy + has_trait = avaricious + } + } + add = -25 + } + + if = { + limit = { + OR = { + has_trait = arrogant + has_trait = arbitrary + has_trait = callous + has_trait = sadistic + } + } + add = -10 + } + + if = { + limit = { + OR = { + has_trait = compassionate + has_trait = gregarious + } + } + add = 10 + } + + # I'm broke! + if = { + limit = { + OR = { + short_term_gold <= minor_gold_value + domicile ?= { herd <= minor_herd_value } + } + } + add = -25 + } + if = { + limit = { + is_lowborn = yes + } + add = -50 + } + + if = { + limit = { + scope:host = { + has_legitimacy = yes + } + } + + add = { + value = 5 + multiply = scope:host.legitimacy_level + } + } + + add = { + value = 10 + multiply = scope:host.prestige_level + } + + add = { + value = scope:host.tyranny + multiply = -2 + } + + add = { + value = "opinion(scope:host)" + divide = 3 + } + + min = 0 + max = 100 +} + +mpo_tsagaan_sar_guest_count = { + value = 0 + involved_activity = { + every_attending_character = { + limit = { + is_adult = yes + NOT = { this = root } + can_gift_anything_trigger = yes + } + add = 1 + } + } +} + +mpo_tsagaan_sar_guest_gifters = { + involved_activity = { + every_attending_character = { + limit = { + is_adult = yes + NOT = { this = root } + can_gift_anything_trigger = yes + var:tsagaan_sar_gift ?= flag:will_gift + } + add = 1 + } + } +} + +mpo_tsagaan_sar_guest_gifters_no = { + involved_activity = { + every_attending_character = { + limit = { + is_adult = yes + NOT = { this = root } + can_gift_anything_trigger = yes + var:tsagaan_sar_gift ?= flag:no_gift + } + add = 1 + } + } +} + +miniscule_gold_value = { + value = tiny_gold_value +} + +tiny_gold_value_double = { + value = tiny_gold_value + multiply = 2 +} + +mpo_zodiac_calculation_value_no_decimal = { + value = current_year + divide = 12 + floor = yes +} + +mpo_zodiac_calculation_value = { + value = current_year + divide = 12 + subtract = mpo_zodiac_calculation_value_no_decimal # To just get the decimal + multiply = 12 + round = yes +} + +### FERTILITY GAIN/LOSS VALUES + +miniscule_county_fertility_value = 5 +minor_county_fertility_value = 10 +medium_county_fertility_value = 20 +major_county_fertility_value = 30 +extreme_county_fertility_value = 40 +massive_county_fertility_value = 50 +monumental_county_fertility_value = 75 + +miniscule_county_fertility_loss = -5 +minor_county_fertility_loss = -10 +medium_county_fertility_loss = -20 +major_county_fertility_loss = -30 +extreme_county_fertility_loss = -40 +massive_county_fertility_loss = -50 +monumental_county_fertility_loss = -75 + +miniscule_county_fertility_gain = 5 +minor_county_fertility_gain = 10 +medium_county_fertility_gain = 20 +major_county_fertility_gain = 30 +extreme_county_fertility_gain = 40 +massive_county_fertility_gain = 50 +monumental_county_fertility_gain = 75 + +herder_list_county_fertility_value = { + value = 0 + every_in_list = { + list = herder_list + add = 1 + } + multiply = medium_county_fertility_value + max = 100 +} + +fishing_counties_gold_value = { + value = 4 + every_in_list = { + list = fishing_counties + add = 2 + } + max = 100 +} + +fishing_counties_gold_high_value = { + value = 8 + every_in_list = { + list = fishing_counties + add = 4 + } + max = 100 +} + +### OBEDIENCE VALUES + +# Used by Code, do not rename or remove +# Used to determine how much obedience_value must reach in order for +# the root character to be considered 'obedient' +# +# root = the character we're calculating the threshold for +obedience_threshold = { + value = { + value = 50 + desc = BASE + } + if = { # Duke + limit = { obedience_target.primary_title.tier ?= tier_duchy } + add = { + value = 20 + desc = duchy + } + } + else_if = { # King + limit = { obedience_target.primary_title.tier ?= tier_kingdom } + add = { + value = 50 + desc = kingdom + } + } + else_if = { # Emperor + limit = { obedience_target.primary_title.tier ?= tier_empire } + add = { + value = 100 + desc = empire + } + } + if = { # Yeke Jarquchi / Chief Law Overseer bonus + limit = { exists = overlord.court_position:yeke_jarquchi_court_position } + add = { + value = -1 + multiply = "overlord.court_position:yeke_jarquchi_court_position.aptitude(yeke_jarquchi_court_position)" + min = -5 + max = 0 + desc = court_position_jarquchi_obedience_modifier + } + } +} + +# Used by Code, do not rename or remove +# Used to determine if a character is obedient to another character +# Any resulting value greater than obedience_threshold above will +# make the root character 'obedient' +# Note: tributaries are considered independent +# +# root = the character for whom we are changing the obedience value +obedience_value = { + value = { + value = 0 + desc = BASE + } + if = { + limit = { + exists = obedience_target + } + if = { + limit = { # Herders are ALWAYS obedient -- we don't even run the rest of calculations + government_has_flag = government_is_herder + } + add = { + value = obedience_threshold + add = 1000 + desc = obedience_value_herder + } + } + else = { + # Have you been overruled to NOT be obedient? + if = { + limit = { + has_variable = not_obedient_humiliation_var + var:not_obedient_humiliation_var = obedience_target + } + add = { value = -850 desc = not_obedient_humiliation_var_tt } + } + else_if = { + limit = { + has_variable = not_obedient_declined_call + var:not_obedient_declined_call = obedience_target + } + add = { value = -850 desc = request_influence_war_recipient_declined_opinion } + } + else_if = { # If you're not overruled to be disobedient, do you have an obedience reason? + limit = { + has_obedience_reason = obedience_target + } + add = { value = 1000 desc = opinion_obedient_reason } + } + + add = { # Opinion + desc = obedience_value_opinion + value = "opinion(obedience_target)" + } + + # Lifestyle Perks + if = { + limit = { + obedience_target = { has_perk = loyalty_and_respect_perk } + is_spouse_of = obedience_target + } + add = { value = 25 desc = obedience_value_loyalty_and_respect } # If you change this value remember changing it in the perk loc key as well + } + if = { + limit = { + obedience_target = { has_perk = honored_to_serve_perk } + is_kurultai_trigger = yes + } + add = { value = 25 desc = obedience_value_honored_to_serve } # If you change this value remember changing it in the perk loc key as well + } + # Family + if = { + limit = { is_primary_heir_of = obedience_target } + add = { value = 250 desc = obedience_value_heir } + } + else_if = { # You are not the preferred heir + limit = { + is_male = yes + is_child_of = obedience_target + obedience_target = { + OR = { + has_realm_law = male_only_law + has_realm_law = male_preference_law + has_realm_law = equal_law + } + } + } + add = { value = -100 desc = obedience_value_heir_not_preferred } + } + else_if = { + limit = { is_spouse_of = obedience_target } + add = { value = 50 desc = obedience_value_spouse } + } + else_if = { + limit = { is_child_of = obedience_target } + add = { value = 50 desc = obedience_value_child } + } + else_if = { + limit = { is_concubine_of = obedience_target } + add = { value = 25 desc = obedience_value_concubine } + } + else_if = { + limit = { is_close_family_of = obedience_target } + add = { value = 25 desc = obedience_value_close_family } + } + else_if = { + limit = { is_extended_family_of = obedience_target } + add = { value = 10 desc = obedience_value_extended_family } + } + + #Yurts + if = { + limit = { + exists = obedience_target.domicile + } + if = { + limit = { + OR = { + has_council_position = councillor_kurultai_1 + has_council_position = councillor_kurultai_2 + has_council_position = councillor_kurultai_3 + has_council_position = councillor_kurultai_4 + } + } + obedience_target.domicile = { + switch = { + trigger = has_domicile_parameter + nomad_yurt_kurultai_obedience_per_piety_lvl_1 = { + add = { value = prev.obedience_target.piety_level desc = kurultai_mystical_yurt_01_domicile_building } + } + nomad_yurt_kurultai_obedience_per_piety_lvl_2 = { + add = { value = prev.obedience_target.piety_level multiply = 2 desc = kurultai_mystical_yurt_01_domicile_building } + } + } + switch = { + trigger = has_domicile_parameter + nomad_yurt_kurultai_more_loyal_lvl_1 = { + add = { value = 6 desc = kurultai_yurt_01 } + } + nomad_yurt_kurultai_more_loyal_lvl_2 = { + add = { value = 12 desc = kurultai_yurt_01 } + } + nomad_yurt_kurultai_more_loyal_lvl_3 = { + add = { value = 18 desc = kurultai_yurt_01 } + } + } + } + } + else_if = { + limit = { + is_courtier_of = obedience_target + } + obedience_target.domicile = { + switch = { + trigger = has_domicile_parameter + loyal_soldiers_yurt_more_obedient_lvl_1 = { + add = { value = 4 desc = loyal_soldiers_yurt_06_domicile_building } + } + loyal_soldiers_yurt_more_obedient_lvl_2 = { + add = { value = 8 desc = loyal_soldiers_yurt_06_domicile_building } + } + loyal_soldiers_yurt_more_obedient_lvl_3 = { + add = { value = 16 desc = loyal_soldiers_yurt_06_domicile_building } + } + } + } + } + if = { + limit = { + obedience_target = { + has_character_flag = established_paiza_system + } + any_equipped_character_artifact = { + root = { can_benefit_from_artifact = prev } + exists = var:paiza_patron + var:paiza_patron = { + this = obedience_target + is_gurkhan = yes + } + } + } + obedience_target.domicile = { + switch = { + trigger = has_domicile_parameter + nomad_yurt_paiza_obedience_bonus_lvl_1 = { + add = { value = 8 desc = domicile_building_parameter_nomad_yurt_paiza_obedience_bonus_lvl_1 } + } + nomad_yurt_paiza_obedience_bonus_lvl_2 = { + add = { value = 16 desc = domicile_building_parameter_nomad_yurt_paiza_obedience_bonus_lvl_2 } + } + nomad_yurt_paiza_obedience_bonus_lvl_3 = { + add = { value = 24 desc = domicile_building_parameter_nomad_yurt_paiza_obedience_bonus_lvl_3 } + } + } + } + } + } + + # Relationships + if = { + limit = { has_relation_blood_brother = obedience_target } + add = { value = 1250 desc = obedience_value_blood_brother } + } + else_if = { + limit = { has_relation_best_friend = obedience_target } + add = { value = 1000 desc = obedience_value_best_friend } + } + else_if = { + limit = { has_relation_friend = obedience_target } + add = { value = 100 desc = obedience_value_friend } + } + else_if = { + limit = { has_relation_ward = obedience_target } + add = { value = 50 desc = obedience_value_ward } + } + else_if = { + limit = { has_relation_guardian = obedience_target } + add = { value = 50 desc = obedience_value_guardian } + } + else_if = { + limit = { has_relation_rival = obedience_target } + add = { value = -100 desc = obedience_value_rival } + } + else_if = { + limit = { has_relation_nemesis = obedience_target } + add = { value = -1000 desc = obedience_value_nemesis } + } + else_if = { + limit = { + NOR = { + has_relation_lover = obedience_target + has_relation_potential_lover = obedience_target + has_relation_crush = obedience_target + has_relation_potential_friend = obedience_target + } + } + add = { value = -50 desc = obedience_value_not_good_relationship } + } + + # Employment + if = { # Is this person in your kurultai? + limit = { + this != obedience_target.primary_spouse + is_councillor_of = obedience_target + } + add = { value = 25 desc = obedience_value_councillor } + } + else_if = { # They're not in your Kurultai + limit = { + NOT = { + is_councillor_of = obedience_target + } + can_be_any_kurultai_trigger = { COURT_OWNER = obedience_target } + } + add = { value = -25 desc = obedience_value_no_kurultai } + } + if = { # Is this your Yeke Jarquchi? + limit = { + obedience_target.court_position:yeke_jarquchi_court_position ?= this + } + add = { value = 50 desc = obedience_value_yeke_jarquchi } + } + else_if = { # Is this your Court Astrologer? + limit = { + obedience_target.court_position:court_astrologer_court_position ?= this + } + add = { value = 25 desc = obedience_value_court_astrologer } + } + else_if = { # Or are they employed by you in any other way? + limit = { + is_courtier_of = obedience_target + has_any_court_position = yes + } + add = { value = 15 desc = obedience_value_court_position } + } + else_if = { # You don't employ them + limit = { + is_courtier_of = obedience_target + has_any_court_position = no + } + add = { value = -15 desc = obedience_value_no_court_position } + } + + # Legitimacy + if = { + limit = { + obedience_target = { + has_nomadic_legitimacy = yes + legitimacy_level >= 3 + } + } + add = { value = 25 desc = obedience_value_high_legitimacy } + } + else = { + add = { value = -15 desc = obedience_value_low_legitimacy } + } + + # Traits + switch = { + trigger = has_trait + loyal = { add = { value = 25 desc = personality_traitdesc.trait.loyal } } + craven = { add = { value = 25 desc = personality_traitdesc.trait.craven } } + content = { add = { value = 10 desc = personality_traitdesc.trait.content } } + humble = { add = { value = 10 desc = personality_traitdesc.trait.humble } } + gregarious = { add = { value = 5 desc = personality_traitdesc.trait.gregarious } } + diligent = { add = { value = 5 desc = personality_traitdesc.trait.diligent } } + disloyal = { add = { value = -25 desc = personality_traitdesc.trait.disloyal } } + deceitful = { add = { value = -25 desc = personality_traitdesc.trait.deceitful } } + stubborn = { add = { value = -25 desc = personality_traitdesc.trait.stubborn } } + arrogant = { add = { value = -20 desc = personality_traitdesc.trait.arrogant } } + paranoid = { add = { value = -10 desc = personality_traitdesc.trait.paranoid } } + ambitious = { add = { value = -10 desc = personality_traitdesc.trait.ambitious } } + brave = { add = { value = -5 desc = personality_traitdesc.trait.brave } } + } + + if = { + limit = { + obedience_target = { has_trait = greatest_of_khans } + } + add = { value = 50 desc = obedience_greatest_of_khans } + } + else_if = { + limit = { + obedience_target = { has_trait = conqueror } + } + add = { value = 35 desc = obedience_conqueror_trait } + } + else_if = { + limit = { + obedience_target = { has_character_modifier = the_great_khan_modifier } + } + add = { value = 20 desc = obedience_greatest_of_khans_descendant } + } + + # Other + if = { # Children + limit = { is_adult = no } + if = { + limit = { is_courtier_of = obedience_target } + add = { value = 125 desc = obedience_value_child_courtier } + } + else = { + add = { value = 100 desc = obedience_value_child_vassal } + switch = { + trigger = has_trait + rowdy = { add = { value = -25 desc = personality_traitdesc.trait.rowdy } } + bossy = { add = { value = -25 desc = personality_traitdesc.trait.bossy } } + charming = { add = { value = 25 desc = personality_traitdesc.trait.charming } } + curious = { add = { value = -25 desc = personality_traitdesc.trait.curious } } + pensive = { add = { value = -25 desc = personality_traitdesc.trait.pensive } } + } + } + } + if = { # Low Prowess + limit = { + obedience_target.prowess <= this.prowess + } + add = { value = -15 desc = obedience_value_low_prowess } + } + + if = { # Low Dread + limit = { + obedience_target.dread < this.dread + } + add = { value = -10 desc = obedience_value_low_dread } + } + else_if = { # High Dread + limit = { + obedience_target.dread > 10 + obedience_target.dread > this.dread + } + add = { + value = obedience_target.dread + multiply = 0.5 + desc = obedience_value_high_dread + } + } + else_if = { + limit = { + obedience_target.dread < 10 + } + add = { value = -5 desc = obedience_value_insignificant_dread } + } + + if = { # Truce + limit = { + has_truce = obedience_target + } + add = { value = 50 desc = obedience_value_truce } + } + + if = { # Larger Herd + limit = { + exists = domicile + domicile.herd >= 100 + domicile.herd > obedience_target.domicile.herd + } + add = { value = -500 desc = obedience_value_herd_size } + } + + if = { # Larger army + limit = { + current_military_strength >= 100 + current_military_strength > obedience_target.current_military_strength + } + add = { value = -500 desc = obedience_value_military_might } + } + + #CULTRADS + if = { + limit = { + culture = { + has_cultural_parameter = nomadic_loyal_soldiers_obedience + } + } + add = { value = 25 desc = obedience_value_loyal_soldiers } + } + } + } +} + +excess_herd_opinion_value = { + min = 10 + max = 50 + + add = 10 + + if = { + limit = { + excess_herd_value >= twenty_percent_over_herd_value + } + add = 10 + } + if = { + limit = { + excess_herd_value >= forty_percent_over_herd_value + } + add = 10 + } + if = { + limit = { + excess_herd_value >= sixty_percent_over_herd_value + } + add = 10 + } + if = { + limit = { + excess_herd_value >= eighty_percent_over_herd_value + } + add = 10 + } +} + +twenty_percent_over_herd_value = { + value = domicile.max_herd + add = domicile.twenty_percent_herd_value +} + +forty_percent_over_herd_value = { + value = domicile.max_herd + add = domicile.forty_percent_herd_value +} + +sixty_percent_over_herd_value = { + value = domicile.max_herd + add = domicile.sixty_percent_herd_value +} + +eighty_percent_over_herd_value = { + value = domicile.max_herd + add = domicile.eighty_percent_herd_value +} + +age_minus_ten = { + value = age + subtract = 10 +} + +age_plus_ten = { + value = age + add = 10 +} + +settlement_issue_control_reward = 25 +settlement_issue_control_penalty = -25 +settlement_issue_herd_reward = minor_herd_value_static +settlement_issue_fertility_reward = tiny_county_fertility_level_gain + +mpo_expand_steppe_prestige_cost = major_prestige_value +mpo_expand_steppe_gold_cost = { + value = medium_gold_value +} + +################################################ +### NOMAD MAA REFILL VALUES + +herd_refill_value = { + value = 0.4 + if = { + limit = { + trigger_if = { + limit = { exists = scope:nomad_temp } + } + trigger_else = { always = no } + } + multiply = { + add = scope:nomad_temp.martial + subtract = 8 + divide = 100 + add = 1 + } + } + if = { + limit = { + has_game_rule = hard_difficulty + scope:nomad_temp ?= { + is_ai = no + } + } + multiply = 0.5 + } + else_if = { + limit = { + has_game_rule = very_hard_difficulty + scope:nomad_temp ?= { + is_ai = no + } + } + multiply = 0.2 + } +} + +herd_refill_value_tt = { + value = 0.4 + multiply = { + add = martial + subtract = 8 + divide = 100 + add = 1 + } + if = { + limit = { + is_ai = no + has_game_rule = hard_difficulty + } + multiply = 0.5 + } + if = { + limit = { + is_ai = no + has_game_rule = very_hard_difficulty + } + multiply = 0.2 + } +} + +martial_discount_herd_refill_value_tt = { + add = martial + subtract = 8 + multiply = -1 + divide = 100 +} + +replenishable_troops_with_herd_value = { + value = replenishable_troops_value + max = { + add = scope:current_herd_max_value_scope + multiply = herd_refill_value + } +} + +replenishable_troops_max_herd_value = { + value = 0 + scope:actor = { + every_maa_regiment = { + add = { + add = maa_max_troops_count + subtract = maa_current_troops_count + if = { + limit = { maa_regiments_cost_more_to_reinforce_per_soldier_trigger = yes } + multiply = maa_regiments_cost_more_to_reinforce_per_soldier_trigger_mult + } + } + } + } + max = scope:actor.domicile.herd + divide = herd_refill_value + multiply = -1 +} + +replenishable_troops_payed_herd_tt_value = { + value = 0 + every_maa_regiment = { + add = { + add = maa_max_troops_count + subtract = maa_current_troops_count + if = { + limit = { maa_regiments_cost_more_to_reinforce_per_soldier_trigger = yes } + multiply = maa_regiments_cost_more_to_reinforce_per_soldier_trigger_mult + } + } + } + divide = herd_refill_value_tt + max = domicile.herd +} + +replenishable_troops_max_herd_tt_value = { + value = 0 + every_maa_regiment = { + add = { + add = maa_max_troops_count + subtract = maa_current_troops_count + } + } + max = { + value = domicile.herd + multiply = herd_refill_value_tt + } +} + +###################################################### + +high_skill_court_astrologer_cost = { + value = medium_gold_value +} + +low_skill_court_astrologer_cost = { + value = minor_gold_value +} + +high_skill_siege_engineer_cost = { + value = medium_gold_value +} + +low_skill_siege_engineer_cost = { + value = minor_gold_value +} + +high_skill_foreign_emissary_cost = { + value = medium_gold_value +} + +low_skill_foreign_emissary_cost = { + value = minor_gold_value +} + +###################################################### + +nomadic_cultural_maa_bonus_low_value = 0.1 +nomadic_cultural_maa_bonus_medium_value = 0.2 +nomadic_cultural_maa_bonus_high_value = 0.4 + +dominate_title_current_ally_strength = { + value = root.current_military_strength + every_tributary = { + limit = { + vassal_contract_has_flag = tributary_contract_tributary_forced_war_override + } + add = root.current_military_strength + } + every_ally = { + add = root.current_military_strength + } +} + +dominate_title_current_enemy_strength = { + value = 0 + root.primary_title.de_jure_liege ?= { + every_de_jure_county_holder = { + limit = { + is_landed = yes + NOR = { + is_allied_to = root + top_liege = root + top_suzerain ?= root + government_has_flag = government_is_herder + } + is_independent_ruler = yes + } + add = current_military_strength + } + } +} + +mpo_de_jure_title_value = { + value = root.highest_held_title_tier + subtract = 1 +} + +sub_realm_with_tributaries_size = { + value = { + add = sub_realm_size + every_tributary = { + every_sub_realm_county = { + add = 1 + } + every_tributary = { + every_sub_realm_county = { + add = 1 + } + every_tributary = { + every_sub_realm_county = { + add = 1 + } + every_tributary = { + every_sub_realm_county = { + add = 1 + } + } + } + } + } + } +} +mpo_greatest_of_khans_target_counties = { + value = 50 +} +mpo_greatest_of_khans_target_counties_tributaries = { + value = 100 +} + +mpo_gok_world_conquest_target_counties = { + value = 1000 +} +mpo_gok_world_conquest_target_counties_tributaries = { + value = 1500 +} + +ninety_percent_gold_value = { + value = gold + multiply = 0.9 +} + +negative_seventy_five_percent_prestige_value = { + value = prestige + multiply = -0.8 +} + +gok_obedient_vassals_strength_value = { + value = 0 + every_in_list = { + list = obedient_nomad_vassals + limit = { + any_character_war = { + using_cb = mpo_great_war_of_defiance_cb + } + } + add = 1 + if = { + limit = { + highest_held_title_tier >= tier_duchy + } + add = 2 + } + if = { + limit = { + highest_held_title_tier >= tier_kingdom + } + add = 3 + } + } + min = 1 +} + +fought_gok_alone_value = { + value = miniscule_dynasty_prestige_gain + multiply = root.var:fought_for_gok_alone + min = 1 +} + +mpo_domicile_yurt_marriage_acceptance_value = { + value = 0 + scope:actor.domicile ?= { + switch = { + trigger = has_domicile_parameter + nomad_yurt_marriage_acceptance_lvl_1 = { add = 5 } + nomad_yurt_marriage_acceptance_lvl_2 = { add = 10 } + nomad_yurt_marriage_acceptance_lvl_3 = { add = 20 } + nomad_yurt_marriage_acceptance_lvl_4 = { add = 30 } + } + switch = { + trigger = has_domicile_parameter + nomad_main_yurt_marriage_acceptance_lvl_1 = { add = 5 } + nomad_main_yurt_marriage_acceptance_lvl_2 = { add = 10 } + nomad_main_yurt_marriage_acceptance_lvl_3 = { add = 15 } + nomad_main_yurt_marriage_acceptance_lvl_4 = { add = 20 } + } + } +} + +potential_joiner_combined_value = { + value = 0 + every_in_list = { + list = potential_joiners + add = 1 + if = { + limit = { + highest_held_title_tier >= tier_duchy + } + add = 2 + } + if = { + limit = { + highest_held_title_tier >= tier_kingdom + } + add = 3 + } + } + min = 1 +} + + +mpo_domicile_yurt_marriage_acceptance_value = { + value = 0 + scope:actor.domicile ?= { + switch = { + trigger = has_domicile_parameter + nomad_yurt_marriage_acceptance_lvl_1 = { add = 5 } + nomad_yurt_marriage_acceptance_lvl_2 = { add = 10 } + nomad_yurt_marriage_acceptance_lvl_3 = { add = 20 } + nomad_yurt_marriage_acceptance_lvl_4 = { add = 30 } + } + switch = { + trigger = has_domicile_parameter + nomad_main_yurt_marriage_acceptance_lvl_1 = { add = 5 } + nomad_main_yurt_marriage_acceptance_lvl_2 = { add = 10 } + nomad_main_yurt_marriage_acceptance_lvl_3 = { add = 15 } + nomad_main_yurt_marriage_acceptance_lvl_4 = { add = 20 } + } + } +} + +sent_herd_opinion_value = { + value = 5 + add = { + if = { + limit = { + scope:actor.diplomacy > 0 + } + add = { + value = scope:actor.diplomacy + multiply = 3 + } + } + if = { + limit = { + scope:recipient.ai_greed > 0 + } + add = { + value = scope:recipient.ai_greed + divide = 3 + } + } + if = { + limit = { + scope:recipient.liege = scope:actor + } + divide = 1.5 + } + if = { + limit = { + scope:recipient = scope:actor.faith.religious_head + } + divide = 3 + } + if = { + limit = { + scope:actor.culture ?= { + has_innovation = fp3_innovation_fritware + } + } + multiply = 1.2 + } + max = 100 + } + if = { + limit = { + scope:actor.culture = { has_cultural_parameter = more_gift_opinion } + } + multiply = 1.2 + } + if = { + limit = { + scope:actor = { has_perk = thoughtful_perk } + } + multiply = 2 + } +} + +herd_gift_value = { + value = scope:actor.domicile.minor_herd_value + if = { + limit = { + scope:recipient.ai_greed > 0 + } + add = { + value = scope:recipient.ai_greed + divide = 4 + } + } + + if = { + limit = { + scope:actor = { + exists = dynasty + dynasty = { + has_dynasty_perk = fp1_adventure_legacy_2 + } + } + } + multiply = 0.5 + } +} + +mpo_current_disobedient_kurultai_value = { + value = 0 + every_councillor = { + limit = { + OR = { + root.cp:councillor_kurultai_1 ?= this + root.cp:councillor_kurultai_2 ?= this + root.cp:councillor_kurultai_3 ?= this + root.cp:councillor_kurultai_4 ?= this + } + is_obedient = no + } + add = 1 + } + switch = { + trigger = has_realm_law + nomadic_authority_5 = { + ordered_child = { + order_by = age + max = define:NKurultai|KURULTAI_SUCCESSION_CHILD_ELECTORS_DOMINANCE_5 + check_range_bounds = no + limit = { + age >= define:NKurultai|KURULTAI_SUCCESSION_CHILD_MINIMUM_AGE + obedience_target = root + } + if = { + limit = { + NOR = { + is_obedient_to = root + root.cp:councillor_kurultai_1 ?= this + root.cp:councillor_kurultai_2 ?= this + root.cp:councillor_kurultai_3 ?= this + root.cp:councillor_kurultai_4 ?= this + } + } + add = 1 + } + } + } + nomadic_authority_4 = { + ordered_child = { + order_by = age + max = define:NKurultai|KURULTAI_SUCCESSION_CHILD_ELECTORS_DOMINANCE_4 + check_range_bounds = no + limit = { + age >= define:NKurultai|KURULTAI_SUCCESSION_CHILD_MINIMUM_AGE + obedience_target = root + } + if = { + limit = { + NOR = { + is_obedient_to = root + root.cp:councillor_kurultai_1 ?= this + root.cp:councillor_kurultai_2 ?= this + root.cp:councillor_kurultai_3 ?= this + root.cp:councillor_kurultai_4 ?= this + } + } + add = 1 + } + } + } + nomadic_authority_3 = { + ordered_child = { + order_by = age + max = define:NKurultai|KURULTAI_SUCCESSION_CHILD_ELECTORS_DOMINANCE_3 + check_range_bounds = no + limit = { + age >= define:NKurultai|KURULTAI_SUCCESSION_CHILD_MINIMUM_AGE + obedience_target = root + } + if = { + limit = { + NOR = { + is_obedient_to = root + root.cp:councillor_kurultai_1 ?= this + root.cp:councillor_kurultai_2 ?= this + root.cp:councillor_kurultai_3 ?= this + root.cp:councillor_kurultai_4 ?= this + } + } + add = 1 + } + } + } + nomadic_authority_2 = { + ordered_child = { + order_by = age + max = define:NKurultai|KURULTAI_SUCCESSION_CHILD_ELECTORS_DOMINANCE_2 + check_range_bounds = no + limit = { + age >= define:NKurultai|KURULTAI_SUCCESSION_CHILD_MINIMUM_AGE + obedience_target = root + } + if = { + limit = { + NOR = { + is_obedient_to = root + root.cp:councillor_kurultai_1 ?= this + root.cp:councillor_kurultai_2 ?= this + root.cp:councillor_kurultai_3 ?= this + root.cp:councillor_kurultai_4 ?= this + } + } + add = 1 + } + } + } + nomadic_authority_1 = { + ordered_child = { + order_by = age + max = define:NKurultai|KURULTAI_SUCCESSION_CHILD_ELECTORS_DOMINANCE_1 + check_range_bounds = no + limit = { + age >= define:NKurultai|KURULTAI_SUCCESSION_CHILD_MINIMUM_AGE + obedience_target = root + } + if = { + limit = { + NOR = { + is_obedient_to = root + root.cp:councillor_kurultai_1 ?= this + root.cp:councillor_kurultai_2 ?= this + root.cp:councillor_kurultai_3 ?= this + root.cp:councillor_kurultai_4 ?= this + } + } + add = 1 + } + } + } + } +} + +mpo_missing_kurultai_value = { + value = 0 + if = { + limit = { + NOT = { exists = cp:councillor_kurultai_1 } + } + add = 1 + } + if = { + limit = { + NOT = { exists = cp:councillor_kurultai_2 } + } + add = 1 + } + if = { + limit = { + NOT = { exists = cp:councillor_kurultai_3 } + } + add = 1 + } + if = { + limit = { + NOT = { exists = cp:councillor_kurultai_4 } + } + add = 1 + } +} + +gok_era_scaling_value = { + if = { + limit = { + current_date >= 1300 + } + value = 5 + } + else_if = { + limit = { + any_culture_global = { + has_cultural_era_or_later = culture_era_late_medieval + } + } + value = 3 + } + else_if = { + limit = { + any_culture_global = { + has_cultural_era_or_later = culture_era_high_medieval + } + } + value = 2 + } + else_if = { + limit = { + any_culture_global = { + has_cultural_era_or_later = culture_era_early_medieval + } + } + value = 1.5 + } + else = { + value = 1 + } +} + +gok_nomadic_riders_small_value = { + value = 12 + multiply = gok_era_scaling_value +} + +gok_nomadic_riders_large_value = { + value = 20 + multiply = gok_era_scaling_value +} + +gok_maa_small_value = { + value = 1 + multiply = gok_era_scaling_value +} + +gok_maa_smallish_value = { + value = 2 + multiply = gok_era_scaling_value +} + +gok_maa_medium_value = { + value = 3 + multiply = gok_era_scaling_value +} + +gok_maa_largish_value = { + value = 4 + multiply = gok_era_scaling_value +} + +gok_maa_large_value = { + value = 5 + multiply = gok_era_scaling_value +} + +#These are the values that will have a HUGE impact on how strong the Greatest of Khans gets +#They provide troops when he subjugates lands through war or interaction + +gok_subjugated_army_levy_value = { + value = 200 + if = { + limit = { + scope:army_giver = { + highest_held_title_tier >= tier_kingdom + } + } + add = 300 + } + if = { + limit = { + scope:army_giver = { + highest_held_title_tier >= tier_empire + } + } + add = 300 + } + if = { + limit = { + scope:army_giver = { + realm_size >= 1 + } + } + add = { + value = scope:army_giver.sub_realm_size + multiply = 20 + } + } + multiply = gok_era_scaling_value +} +gok_subjugated_army_maa_value_very_large = { + value = 0 + if = { + limit = { + scope:army_giver = { + realm_size >= 1 + } + } + add = { + value = scope:army_giver.sub_realm_size + divide = 5 + } + } + multiply = gok_era_scaling_value + floor = yes + max = 24 +} +gok_subjugated_army_maa_value_large = { + value = 0 + if = { + limit = { + scope:army_giver = { + realm_size >= 1 + } + } + add = { + value = scope:army_giver.sub_realm_size + divide = 10 + } + } + multiply = gok_era_scaling_value + floor = yes + max = 16 +} +gok_subjugated_army_maa_value_medium = { + value = 0 + if = { + limit = { + scope:army_giver = { + realm_size >= 1 + } + } + add = { + value = scope:army_giver.sub_realm_size + divide = 15 + } + } + multiply = gok_era_scaling_value + floor = yes + max = 12 +} +gok_subjugated_army_maa_value_small = { + value = 0 + if = { + limit = { + scope:army_giver = { + realm_size >= 1 + } + } + add = { + value = scope:army_giver.sub_realm_size + divide = 20 + } + } + multiply = gok_era_scaling_value + floor = yes + max = 8 +} +gok_subjugated_army_maa_value_very_small = { + value = 0 + if = { + limit = { + scope:army_giver = { + realm_size >= 1 + } + } + add = { + value = scope:army_giver.sub_realm_size + divide = 40 + } + } + multiply = gok_era_scaling_value + floor = yes + max = 4 +} + +gok_retribution_dread_value = { + value = 0 + every_in_list = { + list = devastation_area + add = 2 + } +} + +gok_retribution_herd_value = { + value = 0 + every_in_list = { + list = devastation_area + add = scope:attacker.domicile.miniscule_herd_gain + } +} + +gok_retribution_gold_value = { + value = 0 + every_in_list = { + list = devastation_area + add = { + add = development_level + multiply = 3 + } + } +} + +yeke_jarquchi_aptitude_tooltip = { + value = 0 + if = { + limit = { + exists = court_position:yeke_jarquchi_court_position + } + add = "court_position:yeke_jarquchi_court_position.aptitude(yeke_jarquchi_court_position)" + } +} + +foreign_emissary_aptitude_tooltip = { + value = 0 + if = { + limit = { + exists = court_position:foreign_emissary_court_position + } + add = "court_position:foreign_emissary_court_position.aptitude(foreign_emissary_court_position)" + } +} diff --git a/common/script_values/10_health_values.txt b/common/script_values/10_health_values.txt index 3c374e34..957bbff0 100644 --- a/common/script_values/10_health_values.txt +++ b/common/script_values/10_health_values.txt @@ -269,6 +269,9 @@ physician_safe_treatment_skill_factor = { underweight_threshold = 0 overweight_threshold = 0 +underweight_value = -50 +overweight_value = 50 + feast_weight_modifier_value = { add = 5 # You have a lot of very desirable food diff --git a/common/script_values/50_major_decision_values.txt b/common/script_values/50_major_decision_values.txt index 4413fd60..a65e1ecf 100644 --- a/common/script_values/50_major_decision_values.txt +++ b/common/script_values/50_major_decision_values.txt @@ -42,3 +42,7 @@ convert_to_feudalism_development_requirement = { convert_whole_realm_to_feudalism_west_african_pagan_decision_vassal_count_value = 6 convert_whole_realm_to_feudalism_west_african_pagan_decision_wa_capital_development_value = terrible_development_level + +expand_duchy_max_size_value = { + value = 4 +} diff --git a/common/script_values/50_tribal_values.txt b/common/script_values/50_tribal_values.txt index 9a44966c..54bc699d 100644 --- a/common/script_values/50_tribal_values.txt +++ b/common/script_values/50_tribal_values.txt @@ -1,4 +1,4 @@ -feudalize_tribal_holding_interaction_cost = { +feudalize_holding_interaction_cost = { value = 500 if = { limit = { @@ -7,4 +7,15 @@ } add = -250 } + if = { + limit = { + scope:target ?= { + OR = { + has_county_modifier = mpo_siberian_permafrost_modifier + has_county_modifier = mpo_siberian_permafrost_modifier_bad + } + } + } + add = 2000 + } } diff --git a/common/script_values/99_casus_belli_values.txt b/common/script_values/99_casus_belli_values.txt index b452350d..4dfec65d 100644 --- a/common/script_values/99_casus_belli_values.txt +++ b/common/script_values/99_casus_belli_values.txt @@ -2,6 +2,7 @@ # We separate out most of the guts of this cost multiplier to stop struggle CBs from double-dipping on costs and discounts. common_cb_cost_multiplier_core = { value = 1 + # Bellum Justum Perk if = { limit = { @@ -30,6 +31,28 @@ common_cb_cost_multiplier_core = { desc = CB_ATTACKER_DYNASTY_WARFARE } } + #Confederation vassals against fellow vassals + if = { + limit = { + scope:attacker = { + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + scope:attacker.top_liege = { + is_confederation_member = yes + } + scope:defender.top_liege = { + this = scope:attacker.top_liege + } + } + multiply = { + add = confederation_cb_cost_value + desc = CB_CONFEDERATION_VASSALS + } + } # Culture if = { limit = { @@ -177,6 +200,44 @@ common_cb_cost_multiplier_core = { multiply = 0.5 } + if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:attacker = { + is_ai = yes + prestige > 0 + prestige_level > 0 + } + scope:defender = { + is_ai = no + } + } + multiply = { + value = 0 + desc = hard_difficulty + } + } + else_if = { + limit = { + OR = { + has_game_rule = hard_difficulty + has_game_rule = very_hard_difficulty + } + scope:attacker = { + is_ai = yes + prestige > 0 + prestige_level > 0 + } + } + multiply = { + value = 0.5 + desc = hard_difficulty + } + } + if = { limit = { has_game_rule = no_cost_casus_belli_costs @@ -198,6 +259,24 @@ common_cb_cost_multiplier_core = { desc = ai_conqueror_modifier } } + #Pissed off by a severed head + if = { + limit = { + scope:defender = { + save_temporary_scope_as = head_giver + } + scope:attacker = { + has_variable = severed_head_cb_revenge + var:severed_head_cb_revenge = { + this = scope:head_giver + } + } + } + multiply = { + value = 0.25 + desc = severed_head_revenge_modifier + } + } } common_cb_cost_multiplier = { @@ -289,6 +368,21 @@ common_cb_piety_cost_multiplier_core = { desc = "CB_ATTACKER_HOF_HUMSACD" } } + #You and your blood brother swore to destroy your target + if = { + limit = { + scope:attacker = { + has_variable = blood_brother_foe + var:blood_brother_foe = { + this = scope:defender + } + } + } + multiply = { + value = 0.25 + desc = "CB_BLOOD_BROTHER_FOE" + } + } } common_cb_piety_cost_multiplier_sans_struggles = { @@ -481,6 +575,21 @@ common_cb_prestige_cost_multiplier_core = { desc = "CB_ATTACKER_VASSAL_CONTRACT" } } + #You and your blood brother swore to destroy your target + if = { + limit = { + scope:attacker = { + has_variable = blood_brother_foe + var:blood_brother_foe = { + this = scope:defender + } + } + } + multiply = { + value = 0.25 + desc = "CB_BLOOD_BROTHER_FOE" + } + } } common_cb_prestige_cost_multiplier_sans_struggles = { diff --git a/common/script_values/99_chancellor_values.txt b/common/script_values/99_chancellor_values.txt index fe08d012..d617a779 100644 --- a/common/script_values/99_chancellor_values.txt +++ b/common/script_values/99_chancellor_values.txt @@ -596,7 +596,7 @@ chancellor_integrate_title_contextual_bonuses = { limit = { # Task instigator is admin top liege scope:councillor_liege = { is_independent_ruler = yes - has_government = administrative_government + government_has_flag = government_is_administrative } } add = { @@ -608,16 +608,16 @@ chancellor_integrate_title_contextual_bonuses = { if = { limit = { # Task target is de jure part of an admin empire/kingdom NOT = { - scope:councillor_liege = { has_government = administrative_government } + scope:councillor_liege = { government_has_flag = government_is_administrative } } trigger_if = { limit = { exists = scope:county.empire.holder } - scope:county.empire.holder = { has_government = administrative_government } + scope:county.empire.holder = { government_has_flag = government_is_administrative } } trigger_else = { scope:county.kingdom.holder ?= { is_independent_ruler = yes - has_government = administrative_government + government_has_flag = government_is_administrative } } } @@ -817,6 +817,24 @@ chancellor_learn_on_the_job_scale = { min = 1 } } +### Kurultai Learn on the Job modifier +kurultai_chancellor_learn_on_the_job_scale = { + value = 0 + if = { + limit = { + exists = liege + liege = { has_perk = learn_on_the_job_perk } + highest_skill = diplomacy + } + add = diplomacy + multiply = { + add = learn_on_the_job_percentage + divide = 100 + } + floor = yes + min = 1 + } +} ### Reliable House modifier chancellor_reliable_house_scale = { diff --git a/common/script_values/99_court_chaplain_values.txt b/common/script_values/99_court_chaplain_values.txt index 80f1ea4c..f65ef8d9 100644 --- a/common/script_values/99_court_chaplain_values.txt +++ b/common/script_values/99_court_chaplain_values.txt @@ -682,25 +682,6 @@ court_chaplain_conversion_contextual_bonuses = { desc = COURT_CHAPLAIN_CONVERSION_EASIER_TO_CONVERT_FAITH_IN_MOUNTAINS_BONUS_MODIFIER } } - if = { - limit = { - exists = scope:county - scope:councillor.faith = { has_doctrine_parameter = easier_to_convert_faith_in_hills_forests } - scope:county = { - # We check any province and not just title province, to be generous. - any_county_province = { - OR = { - terrain = hills - terrain = forests - } - } - } - } - add = { - value = scope:councillor.easier_to_convert_faith_in_hills_forests_bonus - desc = COURT_CHAPLAIN_CONVERSION_EASIER_TO_CONVERT_FAITH_IN_HILLS_FORESTS_BONUS_MODIFIER - } - } ## Maluses ### Chthonic Redoubts if = { @@ -722,25 +703,6 @@ court_chaplain_conversion_contextual_bonuses = { desc = COURT_CHAPLAIN_CONVERSION_HARDER_TO_CONVERT_FAITH_AWAY_IN_MOUNTAINS_MALUS_MODIFIER } } - if = { - limit = { - exists = scope:county - scope:county = { - faith = { has_doctrine_parameter = harder_to_convert_faith_away_in_hills_forests } - # We check any province and not just title province, to be generous. - any_county_province = { - OR = { - terrain = hills - terrain = forests - } - } - } - } - add = { - value = scope:councillor.harder_to_convert_faith_away_in_hills_forests_malus - desc = COURT_CHAPLAIN_CONVERSION_HARDER_TO_CONVERT_FAITH_AWAY_IN_HILLS_FORESTS_MALUS_MODIFIER - } - } ### Syncretics #### Syncretic tenets aim to allow a faith and a separate religion/family to coexist without one eating the other. Accordingly, we make it harder for you to syncretise with a faith *then* wipe it out. if = { @@ -869,8 +831,7 @@ court_chaplain_conversion_contextual_bonuses = { } if = { limit = { - exists = scope:county - scope:county = { has_county_modifier = petition_liege_county_control_modifier } + scope:county ?= { has_county_modifier = petition_liege_county_convert_modifier } } add = { value = scope:councillor.petition_liege_county_convert_modifier_value @@ -898,7 +859,7 @@ court_chaplain_conversion_contextual_bonuses = { scope:councillor.faith = { controls_holy_site = kerala } - title:b_honnore = { + title:b_mahoyadapuram = { is_holy_site_of = scope:councillor.faith } } @@ -1101,6 +1062,30 @@ court_chaplain_conversion_contextual_bonuses = { desc = CONVERSION_REFORMER_BONUS_VALUE } } + if = { + limit = { + exists = scope:county + scope:county = { + has_county_modifier = internal_affairs_county_religious_tensions_modifier + } + } + add = { + value = -0.2 + desc = RELIGIOUS_TENSIONS_DESC + } + } + if = { + limit = { + exists = scope:county + scope:county = { + has_county_modifier = internal_affairs_county_religious_tolerance_modifier + } + } + add = { + value = -0.1 + desc = RELIGIOUS_TOLERANCE_DESC + } + } } convert_faith_fervor_modifier_scale = 0.5 # Fervor causes the conversion speed to scale from 150% to 50% of base. @@ -1492,32 +1477,7 @@ conversion_ghw_tenet_no_hof_bonus = { } #Not that you should ever really have ten holy sites, but just in case. } -#### -easier_to_convert_faith_in_hills_forests_bonus_root_value = 0.5 -easier_to_convert_faith_in_hills_forests_bonus_loc_control = { - value = easier_to_convert_faith_in_hills_forests_bonus_root_value - multiply = 100 -} - -easier_to_convert_faith_in_hills_forests_bonus = { - value = court_chaplain_conversion_base_total - multiply = easier_to_convert_faith_in_hills_forests_bonus_root_value -} - -harder_to_convert_faith_away_in_hills_forests_malus_root_value = -0.75 - -harder_to_convert_faith_away_in_hills_forests_malus_loc_control = { - value = harder_to_convert_faith_away_in_hills_forests_malus_root_value - multiply = 100 -} - -harder_to_convert_faith_away_in_hills_forests_malus = { - value = court_chaplain_conversion_base_total - multiply = harder_to_convert_faith_away_in_hills_forests_malus_root_value -} - -#### easier_to_convert_faith_in_mountains_bonus_root_value = 0.5 easier_to_convert_faith_in_mountains_bonus_loc_control = { @@ -1708,6 +1668,24 @@ court_chaplain_learn_on_the_job_scale = { } } +##### Kurultai Learn on the Job Skill bonus for Liege +kurultai_court_chaplain_learn_on_the_job_scale = { + value = 0 + if = { + limit = { + liege = { has_perk = learn_on_the_job_perk } + highest_skill = learning + } + add = learning + multiply = { + add = learn_on_the_job_percentage + divide = 100 + } + floor = yes + min = 1 + } +} + ### Reliable House modifier court_chaplain_reliable_house_scale = { value = 0 diff --git a/common/script_values/99_kurultai_values.txt b/common/script_values/99_kurultai_values.txt new file mode 100644 index 00000000..3c163ab2 --- /dev/null +++ b/common/script_values/99_kurultai_values.txt @@ -0,0 +1,303 @@ +### +# Kurultai yurts bonuses +kurultai_main_yurt_bonus = { + value = 1 + if = { + limit = { + exists = scope:councillor_liege + exists = scope:councillor_liege.domicile + } + scope:councillor_liege.domicile ?= { + switch = { + trigger = has_domicile_parameter + main_yurt_kurultai_bonus_lvl_1 = { + add = 0.05 + } + main_yurt_kurultai_bonus_lvl_2 = { + add = 0.1 + } + main_yurt_kurultai_bonus_lvl_3 = { + add = 0.15 + } + } + switch = { + trigger = has_domicile_parameter + nomad_yurt_better_kurultai_lvl_1 = { + add = 0.05 + } + nomad_yurt_better_kurultai_lvl_2 = { + add = 0.1 + } + nomad_yurt_better_kurultai_lvl_3 = { + add = 0.15 + } + } + switch = { + trigger = has_domicile_parameter + nomad_yurt_kurultai_skill_increase_per_piety_lvl_1 = { + add = { + value = scope:councillor_liege.piety_level + multiply = 0.01 + min = 0 + } + } + nomad_yurt_kurultai_skill_increase_per_piety_lvl_2 = { + add = { + value = scope:councillor_liege.piety_level + multiply = 0.02 + min = 0 + } + } + } + } + } +} + +### Managing Herd +# Base skills +kurultai_manage_herd_skill_tooltip = { + add = diplomacy +} + +# Base value +kurultai_manage_herd_base_value = { + add = 0.5 +} + +kurultai_manage_herd_skill_value = { + add = diplomacy + divide = 4 + if = { + limit = { + councillor_liege_has_erudition_legacy_5_perk = yes + } + multiply = 1.1 + } + multiply = kurultai_main_yurt_bonus +} + +kurultai_manage_herd_final_value = { + add = kurultai_manage_herd_base_value + add = kurultai_manage_herd_skill_value +} + +### Increasing Fertility +kurultai_increased_fertility_skill_tooltip = { + add = stewardship +} + +kurultai_increased_fertility_base_value = { + add = 1 +} + +kurultai_increased_fertility_skill_value = { + add = stewardship + if = { + limit = { + councillor_liege_has_erudition_legacy_5_perk = yes + } + multiply = 1.1 + } + multiply = kurultai_main_yurt_bonus + multiply = 2 +} + +kurultai_increased_fertility_scale_value = { + add = kurultai_increased_fertility_final_value +} + + +kurultai_increased_fertility_final_value = { + add = kurultai_increased_fertility_base_value + add = kurultai_increased_fertility_skill_value +} + +### Increasing Control +kurultai_increase_control_skill_tooltip = { + add = martial +} + +### Aiding Court Astrologer +kurultai_court_astrologer_skill_tooltip = { + add = learning +} + +kurultai_court_astrologer_piety_base_value = { + add = 1 +} + +kurultai_court_astrologer_piety_skill_value = { + add = learning + divide = 5 + if = { + limit = { + councillor_liege_has_erudition_legacy_5_perk = yes + } + multiply = 1.1 + } + multiply = kurultai_main_yurt_bonus +} + +kurultai_court_astrologer_piety_final_value = { + add = kurultai_court_astrologer_piety_base_value + add = kurultai_court_astrologer_piety_skill_value + if = { + limit = { + scope:councillor_liege = { has_perk = zealous_proselytizer_perk } + } + multiply = 2 # Make sure to make this number always match zealous_proselytizer_stargazer_percentage + } + max = 10 +} + +kurultai_court_astrologer_aptitude_base_value = { + add = 1 +} + +kurultai_court_astrologer_aptitude_skill_value = { + add = learning + divide = 4 + if = { + limit = { + councillor_liege_has_erudition_legacy_5_perk = yes + } + multiply = 1.1 + } + multiply = kurultai_main_yurt_bonus +} + +kurultai_court_astrologer_aptitude_final_value = { + add = kurultai_court_astrologer_aptitude_base_value + add = kurultai_court_astrologer_aptitude_skill_value + max = 15 +} + +### Exploit Area +kurultai_exploit_area_fertility_base_value = { + add = 1.5 +} + +kurultai_exploit_area_fertility_skill_value = { + add = stewardship + divide = 25 + if = { + limit = { + councillor_liege_has_erudition_legacy_5_perk = yes + } + multiply = 1.1 + } + multiply = kurultai_main_yurt_bonus + max = 1.3 +} + +kurultai_exploit_area_fertility_final_value = { + add = kurultai_exploit_area_fertility_base_value + subtract = kurultai_exploit_area_fertility_skill_value + min = 0.2 + max = 1.5 +} + +kurultai_exploit_area_income_base_value = { + add = 1 +} + +kurultai_exploit_area_income_skill_value = { + add = stewardship + if = { + limit = { + councillor_liege_has_erudition_legacy_5_perk = yes + } + multiply = 1.1 + } + multiply = kurultai_main_yurt_bonus +} + +kurultai_exploit_area_income_final_value = { + add = kurultai_exploit_area_income_base_value + add = kurultai_exploit_area_income_skill_value +} + +### Organize Raiders +kurultai_organize_raiders_loot_base_value = { + add = 0.5 +} + +kurultai_organize_raiders_loot_skill_value = { + add = martial + if = { + limit = { + councillor_liege_has_erudition_legacy_5_perk = yes + } + multiply = 1.1 + } + multiply = kurultai_main_yurt_bonus +} + +kurultai_organize_raiders_loot_final_value = { + add = kurultai_organize_raiders_loot_base_value + add = kurultai_organize_raiders_loot_skill_value +} + +kurultai_organize_raiders_raid_base_value = { + add = 3 +} + +kurultai_organize_raiders_raid_skill_value = { + add = martial + divide = 2 + if = { + limit = { + councillor_liege_has_erudition_legacy_5_perk = yes + } + multiply = 1.1 + } + multiply = kurultai_main_yurt_bonus +} + +kurultai_organize_raiders_raid_final_value = { + add = kurultai_organize_raiders_raid_base_value + add = kurultai_organize_raiders_raid_skill_value +} + +### Culture +kurultai_culture_max_value = { + add = learning + multiply = 2 + max = 50 +} + +kurultai_culture_base_monthly_increase = { + value = 0.05 +} + +kurultai_culture_skill_monthly_increase = { + add = learning + multiply = 2 + divide = 24 +} + +kurultai_culture_perk_monthly_increase = { + value = 0 + if = { + limit = { + scope:councillor_liege = { has_perk = of_the_people_perk } + } + add = 2 + } +} + +kurultai_culture_monthly_increase = { + add = kurultai_culture_base_monthly_increase + add = kurultai_culture_skill_monthly_increase + add = kurultai_culture_perk_monthly_increase +} + +kurultai_culture_final_value = { + value = 0 + if = { + limit = { + scope:councillor_liege = { has_variable = kurultai_culture_variable_value } + } + add = scope:councillor_liege.var:kurultai_culture_variable_value + } +} diff --git a/common/script_values/99_marshal_values.txt b/common/script_values/99_marshal_values.txt index 35c84159..9bb4c36a 100644 --- a/common/script_values/99_marshal_values.txt +++ b/common/script_values/99_marshal_values.txt @@ -505,6 +505,23 @@ marshal_learn_on_the_job_scale = { } } +kurultai_marshal_learn_on_the_job_scale = { + value = 0 + if = { + limit = { + liege = { has_perk = learn_on_the_job_perk } + highest_skill = martial + } + add = martial + multiply = { + add = learn_on_the_job_percentage + divide = 100 + } + floor = yes + min = 1 + } +} + marshal_scheme_overtime_boost_scale = { add = 0 if = { diff --git a/common/script_values/99_steward_values.txt b/common/script_values/99_steward_values.txt index 993e1f21..bbf3c105 100644 --- a/common/script_values/99_steward_values.txt +++ b/common/script_values/99_steward_values.txt @@ -19,6 +19,23 @@ steward_learn_on_the_job_scale = { } } +kurultai_steward_learn_on_the_job_scale = { + value = 0 + if = { + limit = { + liege = { has_perk = learn_on_the_job_perk } + highest_skill = stewardship + } + add = stewardship + multiply = { + add = learn_on_the_job_percentage + divide = 100 + } + floor = yes + min = 1 + } +} + ### Reliable House modifier steward_reliable_house_scale = { value = 0 @@ -483,25 +500,6 @@ steward_promote_culture_contextual_bonuses = { desc = STEWARD_PROMOTE_CULTURE_EASIER_TO_CONVERT_CULTURE_IN_SAME_FAITH_MOUNTAINS_BONUS } } - if = { - limit = { - exists = scope:county - scope:councillor_liege.faith = { has_doctrine_parameter = easier_to_convert_culture_in_same_faith_hills_forests } - scope:county = { - faith = scope:councillor_liege.faith - any_county_province = { - OR = { - terrain = mountains - terrain = desert_mountains - } - } - } - } - add = { - value = scope:councillor.promote_culture_easier_to_convert_culture_in_same_faith_hills_forests_bonus - desc = STEWARD_PROMOTE_CULTURE_EASIER_TO_CONVERT_CULTURE_IN_SAME_FAITH_HILLS_FORESTS_BONUS - } - } if = { limit = { scope:councillor_liege.culture = { @@ -672,6 +670,23 @@ steward_promote_culture_contextual_bonuses = { } } + if = { + limit = { + scope:councillor_liege.culture = { has_cultural_pillar = heritage_syriac } + exists = scope:county + scope:county = { + has_county_modifier = promote_culture_beth_nahrain_modifier + NOT = { + culture = { has_cultural_pillar = heritage_syriac } + } + } + } + add = { + value = promote_culture_beth_nahrain_bonus + desc = steward_promote_culture_beth_nahrain + } + } + if = { limit = { scope:county.culture ?= { has_cultural_pillar = heritage_iranian } @@ -848,6 +863,11 @@ promote_culture_reclaimed_brittania_bonus = { multiply = 0.75 } +promote_culture_beth_nahrain_bonus = { + value = steward_promote_culture_base_total + multiply = 0.75 +} + steward_promote_culture_erudition_bonus_monthly_increase = { value = steward_promote_culture_base_total multiply = { diff --git a/common/scripted_triggers/00_activity_triggers.txt b/common/scripted_triggers/00_activity_triggers.txt new file mode 100644 index 00000000..cc298b18 --- /dev/null +++ b/common/scripted_triggers/00_activity_triggers.txt @@ -0,0 +1,664 @@ +is_available_for_activity_trigger = { + NOT = { exists = involved_activity } + is_adult = yes + OR = { + is_ai = no + is_busy_in_events_unlocalised = no + } + is_at_war = no + is_imprisoned = no + is_healthy = yes + NOR = { + exists = var:booked_for_a_party + exists = var:engaged_in_single_combat + } +} + +is_available_for_child_activity_trigger = { + NOT = { exists = involved_activity } + is_adult = no + age >= 4 + age < less_than_two_years_to_adulthood_value #To avoid being away when Coming of Age-event triggers + OR = { + is_ai = no + is_busy_in_events_unlocalised = no + } + is_at_war = no + is_imprisoned = no + is_hostage = no + is_healthy = yes + NOR = { + exists = var:hostage_travelling_to_warden + exists = var:ward_travelling_to_guardian + } +} + +is_available_in_activity_trigger = { + exists = involved_activity + is_adult = yes + OR = { + is_ai = no + is_busy_in_events_unlocalised = no + } + is_at_war = no + is_imprisoned = no + is_healthy = yes +} + +### Witch Ritual +activity_witch_ritual_valid_trigger = { + exists = house + house = { + has_house_modifier = witch_coven + any_house_member = { + NOT = { this = root } + is_witch_known_by_trigger = { CHARACTER = root } + } + } +} + +### Petition Liege triggers + +# Council Seat +petition_liege_council_seat_liege_trigger = { + liege ?= { + OR = { + cp:councillor_chancellor ?= { + NOT = { + is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = root.liege } + } + } + cp:councillor_marshal ?= { + NOT = { + is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = root.liege } + } + } + cp:councillor_steward ?= { + NOT = { + is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = root.liege } + } + } + cp:councillor_spymaster ?= { + NOT = { + is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = root.liege } + } + } + trigger_if = { + limit = { root.faith = root.liege.faith } + root.faith = { has_doctrine = doctrine_clerical_succession_temporal_appointment } + cp:councillor_court_chaplain ?= { + NOT = { + is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = root.liege } + } + } + } + NOT = { exists = cp:councillor_chancellor } + NOT = { exists = cp:councillor_marshal } + NOT = { exists = cp:councillor_steward } + NOT = { exists = cp:councillor_spymaster } + trigger_if = { + limit = { root.faith = root.liege.faith } + root.faith = { has_doctrine = doctrine_clerical_succession_temporal_appointment } + NOT = { exists = cp:councillor_court_chaplain } + } + } + } +} + +petition_liege_council_chaplain_appointable_trigger = { + $LIEGE$.faith = { has_doctrine = doctrine_clerical_succession_temporal_appointment } + $LIEGE$.faith = $JOB_TAKER$.faith +} + +petition_liege_councillor_second_trigger = { + NOT = { $JOB_TAKER$.var:petition_liege_council_first ?= flag:$ROLE$ } + trigger_if = { + limit = { exists = $LIEGE$.cp:councillor_$ROLE$ } + OR = { + $JOB_TAKER$.$SKILL$ >= $LIEGE$.cp:councillor_$ROLE$.$SKILL$ + $JOB_TAKER$ = { has_trait = education_$SKILL$ } + } + } + trigger_else = { $JOB_TAKER$.$SKILL$ >= mediocre_skill_rating } +} + +petition_liege_councillor_blocked_trigger = { + $JOB_TAKER$ = { + can_be_$ROLE$_trigger = { COURT_OWNER = $LIEGE$ } + } + $LIEGE$.cp:councillor_$ROLE$ ?= { + NOT = { + is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = $LIEGE$ } + } + trigger_if = { + limit = { exists = scope:eunuch } + NOT = { is_close_family_of = scope:eunuch } + } + } +} + +# Pay Debt +petition_liege_pay_debt_trigger = { + debt_level > -1 + liege.debt_level = -1 +} + +# War Aid +petition_liege_war_aid_trigger = { + is_at_war = yes + save_temporary_scope_as = vassal + any_character_war = { + scope:vassal = { is_leader_in_war = prev } + trigger_if = { + limit = { + scope:vassal = { is_attacker_in_war = prev } + } + defender_war_score >= petition_war_aid_score_value + } + trigger_else = { attacker_war_score >= petition_war_aid_score_value } + } +} + +petition_liege_war_liege_involvement_trigger = { + liege = { + NOR = { + any_character_war = { + root.liege = { is_leader_in_war = prev } + trigger_if = { + limit = { + root.liege = { is_defender_in_war = prev } + } + OR = { + primary_attacker.primary_title.tier >= root.liege.primary_title.tier + petition_liege_attacker_strength_value > petition_war_aid_liege_ally_advantage_value + } + } + trigger_else = { + OR = { + primary_attacker.primary_title.tier >= root.liege.primary_title.tier + petition_liege_attacker_strength_value > petition_war_aid_liege_ally_advantage_value + } + } + } + is_in_ongoing_great_holy_war = yes + } + } +} + +petition_liege_war_aid_share_trigger = { + NOT = { + any_character_war = { + root = { is_leader_in_war = prev } + any_war_participant = { this = root.liege } + } + } +} + +# Vassal War +petition_liege_vassal_war_trigger = { + any_character_war = { + root = { is_leader_in_war = prev } # root is a war leader + primary_attacker.liege = primary_defender.liege # War is between vassals of the same liege + NOT = { + root.liege = { is_participant_in_war = prev } # Liege is not involved in the war + } + } +} + +# Control +petition_liege_county_control_trigger = { + tier = tier_county + trigger_if = { + limit = { tier = tier_county } + county_control < medium_county_control + } +} + +# Convert +petition_liege_county_convert_trigger = { + tier = tier_county + trigger_if = { + limit = { tier = tier_county } + NOT = { county.faith = holder.faith } + } +} + +# Opinion +petition_liege_county_opinion_trigger = { + tier = tier_county + trigger_if = { + limit = { tier = tier_county } + county_opinion <= petition_county_opinion_value + } +} + +# Fortify +petition_liege_fortify_border_trigger = { + tier = tier_county + trigger_if = { + limit = { tier = tier_county } + county = { + save_temporary_scope_as = county_scope + any_title_to_title_neighboring_county = { + NOT = { holder.top_liege = scope:county_scope.holder.top_liege } # petition_liege + NOT = { + holder.top_liege = { is_allied_to = scope:county_scope.holder.top_liege } # petition_liege + } + } + } + } +} + +# Liege Title +petition_liege_title_liege_trigger = { + holder = prev.liege + NOT = { THIS = prev.liege.primary_title } + tier < prev.liege.primary_title.tier + trigger_if = { + limit = { exists = county } + NOT = { county = holder.capital_county } + } + OR = { + tier > tier_county + holder = { + any_held_title = { + count > 1 + tier = tier_county + } + } + } +} + +# Vassal Title +petition_liege_title_vassal_trigger = { + exists = holder + holder = { save_temporary_scope_as = second_temp } + OR = { + scope:second_temp.liege = prev.liege + scope:second_temp.liege.liege = prev.liege + scope:second_temp.liege.liege.liege = prev.liege + } + NOR = { + scope:second_temp = prev.liege + has_variable = petition_title_cooldown + scope:second_temp = { is_at_war = yes } + prev.liege = { + any_targeting_faction = { + any_faction_member = { this = scope:second_temp } + } + } + } + #trigger_if = { + # limit = { exists = county } + # NOT = { county = holder.capital_county } + #} + scope:second_temp = { + trigger_if = { + limit = { government_has_flag = government_is_feudal } + NOT = { vassal_contract_obligation_level_can_be_decreased = title_revocation_rights } + } + } + OR = { + tier > tier_county + scope:second_temp = { + any_held_title = { + count > 1 + tier = tier_county + } + } + } +} + +# Construct City +petition_liege_construct_city_trigger = { + county_has_empty_province_trigger = yes + OR = { + county_has_no_city_trigger = yes + county_has_all_holding_types = yes + } +} + +# Construct Temple +petition_liege_construct_temple_trigger = { + county_has_empty_province_trigger = yes + OR = { + county_has_no_church_trigger = yes + county_has_all_holding_types = yes + } +} + +# AI weightings +petition_liege_medium_cost_trigger = { + exists = scope:petition_vassal + scope:petition_vassal = { has_variable = petition_type } + OR = { + trigger_if = { + limit = { scope:petition_vassal.var:petition_type = flag:pay_debt } + scope:petition_vassal.debt_level < 3 + } + scope:petition_vassal.var:petition_type = flag:war_aid + scope:petition_vassal.var:petition_type = flag:vassal_war + scope:petition_vassal.var:petition_type = flag:title_vassal + trigger_if = { + limit = { scope:petition_vassal.var:petition_type = flag:war_aid } + petitioner_war_aid_levies_cost_value > scope:petition_liege.medium_gold_value + } + } +} + +petition_liege_high_cost_trigger = { + exists = scope:petition_vassal + scope:petition_vassal = { has_variable = petition_type } + OR = { + trigger_if = { + limit = { scope:petition_vassal.var:petition_type = flag:pay_debt } + scope:petition_vassal.debt_level >= 3 + } + scope:petition_vassal.var:petition_type = flag:title_liege + scope:petition_vassal.var:petition_type = flag:construct_city + scope:petition_vassal.var:petition_type = flag:construct_temple + scope:petition_vassal.var:petition_type = flag:development + trigger_if = { + limit = { scope:petition_vassal.var:petition_type = flag:war_aid } + petitioner_war_aid_levies_cost_value > scope:petition_liege.major_gold_value + } + } +} + +petition_liege_likes_trigger = { + exists = $COMPARE$ + OR = { + has_relation_friend = $COMPARE$ + has_relation_best_friend = $COMPARE$ + has_relation_soulmate = $COMPARE$ + has_relation_lover = $COMPARE$ + is_close_family_of = $COMPARE$ + opinion = { + target = $COMPARE$ + value >= 50 + } + } +} + +petition_liege_dislikes_trigger = { + exists = $COMPARE$ + OR = { + has_relation_rival = $COMPARE$ + has_relation_nemesis = $COMPARE$ + opinion = { + target = $COMPARE$ + value <= -50 + } + } +} + +# Character is not already involved in the event e.g. claim target, incumbent councillor, etc. +petition_liege_skiller_trigger = { + is_available_adult = yes + + trigger_if = { + limit = { exists = scope:second_party } + NOT = { this = scope:second_party } + } + trigger_if = { + limit = { exists = scope:vassal_claimant } + NOT = { this = scope:vassal_claimant } + } + trigger_if = { + limit = { exists = scope:second_councillor } + NOT = { this = scope:second_councillor } + } + trigger_if = { + limit = { exists = scope:diplomacy_check } + NOT = { this = scope:diplomacy_check } + } + trigger_if = { + limit = { exists = scope:martial_check } + NOT = { this = scope:martial_check } + } + trigger_if = { + limit = { exists = scope:stewardship_check } + NOT = { this = scope:stewardship_check } + } + trigger_if = { + limit = { exists = scope:intrigue_check } + NOT = { this = scope:intrigue_check } + } + trigger_if = { + limit = { exists = scope:learning_check } + NOT = { this = scope:learning_check } + } + trigger_if = { + limit = { exists = scope:petition_vassal } + NOT = { this = scope:petition_vassal } + } +} + +# Has a councillor or spouse who is not involved in the event already +petition_liege_has_main_skiller_trigger = { + scope:petition_liege = { + OR = { + trigger_if = { + limit = { exists = cp:councillor_chancellor } + cp:councillor_chancellor = { petition_liege_skiller_trigger = yes } + } + trigger_else = { always = no } + + trigger_if = { + limit = { exists = cp:councillor_marshal } + cp:councillor_marshal = { petition_liege_skiller_trigger = yes } + } + trigger_else = { always = no } + + trigger_if = { + limit = { exists = cp:councillor_steward } + cp:councillor_steward = { petition_liege_skiller_trigger = yes } + } + trigger_else = { always = no } + + trigger_if = { + limit = { exists = cp:councillor_spymaster } + cp:councillor_spymaster = { petition_liege_skiller_trigger = yes } + } + trigger_else = { always = no } + + trigger_if = { + limit = { exists = cp:councillor_court_chaplain } + cp:councillor_court_chaplain = { petition_liege_skiller_trigger = yes } + } + trigger_else = { always = no } + + trigger_if = { + limit = { + is_married = yes + exists = primary_spouse + } + primary_spouse = { + is_playable_character = no + petition_liege_skiller_trigger = yes + exists = scope:petition_vassal + NOT = { has_any_scripted_relation = scope:petition_vassal } + } + } + trigger_else = { always = no } + } + } +} + +# Character can be a wildcard, due to their existing relationship with petitioner +petition_liege_wildcard_trigger = { + OR = { + has_relation_friend = scope:petition_vassal + has_relation_best_friend = scope:petition_vassal + has_relation_lover = scope:petition_vassal + has_relation_soulmate = scope:petition_vassal + opinion = { + target = scope:petition_vassal + value >= 50 + } + } +} + +# No more than 2 skill check options already exist +petition_liege_skillcheck_limit = { + calc_true_if = { + amount < 2 + exists = scope:diplomacy_check + exists = scope:martial_check + exists = scope:stewardship_check + exists = scope:intrigue_check + exists = scope:learning_check + } +} + +# Character is valid councillor and invalid wildcard +petition_liege_skiller_no_wildcard_trigger = { + petition_liege_skiller_trigger = yes + petition_liege_wildcard_trigger = no +} + +# Character has some way to be placated by liege +petition_liege_relation_favor_trigger = { + can_add_hook = { + type = favor_hook + target = scope:petition_liege + } + OR = { + has_relation_friend = scope:petition_liege + has_relation_best_friend = scope:petition_liege + has_relation_lover = scope:petition_liege + has_relation_soulmate = scope:petition_liege + } +} + +# For picking which council position to offer +petition_liege_councillor_replace_weight_trigger = { + AND = { + scope:petition_vassal = { has_variable = petition_liege_council_first } + scope:petition_vassal.var:petition_liege_council_first = flag:$JOB$ + OR = { + NOT = { has_councillor_for_skill = $SKILL$ } + AND = { + exists = scope:second_party + scope:petition_vassal.$SKILL$ > scope:second_party.$SKILL$ + } + } + } +} + +# Petition is still valid +petition_liege_valid_trigger = { + is_alive = yes + is_imprisoned = no + has_variable = petition_liege_scope + liege = var:petition_liege_scope + var:petition_liege_scope = { + is_imprisoned = no + has_royal_court = yes + } +} + +adventurer_potential_destination_distance_check = { + #This is made to be used inside set_adventure_location_effect - it relies on the scope it is being run in being the adventurer + #Also expects $REGION$ + any_county_in_region = { + region = $REGION$ + trigger_if = { + limit = { + prev.adventure_inspiration_average_skill_value >= high_inspiration_skill + } + NOT = { + prev.location = { + geographical_region = $REGION$ + } + } #Highly skilled adventurers can travel anywhere - and will not pick the region they are already in + } + trigger_else_if = { + limit = { + prev.adventure_inspiration_average_skill_value >= medium_inspiration_skill + } + squared_distance = { + target = prev.location + value <= medium_adventure_max_length + } + } + trigger_else = { + #low_inspiration_skill + squared_distance = { + target = prev.location + value < short_adventure_max_length + } + } + } +} + +activity_invite_rule_trigger = { + is_adult = yes + is_imprisoned = no + in_diplomatic_range = root +} + +considers_social_presence_a_gift_to_other_trigger = { + has_trait = improvident + OR = { + has_trait = gregarious + has_trait = arrogant + } +} + +not_hosting_a_murder_feast = { + trigger_if = { + limit = { + this = scope:host + scope:activity = { + has_activity_type = activity_feast + } + } + scope:activity = { + NOT = { + has_activity_option = { + category = special_type + option = feast_type_murder + } + } + } + } + trigger_else = { + always = yes + } +} + +factor_zero_if_entitled_to_freebie_activity_trigger = { + dynasty ?= { has_dynasty_perk = ep2_activities_legacy_5 } + this = house.house_head + NOT = { has_variable = ep2_activities_legacy_5_had_freebie } +} + +# to be run in activity scope +has_attending_activity_guests = { + # We have more than one attending character + # Host always attends so we ignore them + any_attending_character = { + count > 1 # 1 includes the host who always attends + } +} + +any_journey_point_of_interest_trigger = { + has_special_building = yes + NOR = { + has_building_or_higher = generic_university + has_building_or_higher = hall_of_heroes_01 + has_building_or_higher = special_sicilian_parliament_01 + has_building_or_higher = special_greenhouse_01 + has_building_or_higher = holy_site_cathedral_01 + has_building_or_higher = holy_site_mosque_01 + has_building_or_higher = holy_site_fire_temple_01 + has_building_or_higher = holy_site_pagan_grand_temple_01 + has_building_or_higher = holy_site_indian_grand_temple_01 + has_building_or_higher = holy_site_other_grand_temple_01 + has_building_or_higher = generic_copper_mines_01 + has_building_or_higher = generic_silver_mines_01 + has_building_or_higher = generic_gold_mines_01 + } +} + diff --git a/common/scripted_triggers/00_adultery_triggers.txt b/common/scripted_triggers/00_adultery_triggers.txt new file mode 100644 index 00000000..5d33490b --- /dev/null +++ b/common/scripted_triggers/00_adultery_triggers.txt @@ -0,0 +1,129 @@ +# This character is publicly known for cheating on the SPOUSE +exposed_cheating_on_spouse_trigger = { #Is a publicly known cheater against spouse + OR = { + reverse_has_opinion_modifier = { + modifier = unfaithful_spouse_exposed_opinion + target = $SPOUSE$ + } + AND = { + has_variable = std_from_unfaithfulness_against + var:std_from_unfaithfulness_against = $SPOUSE$ + } + } +} + +would_attempt_to_seduce_trigger = { + is_adult = yes + age <= 50 + # Already interested or not a relation + trigger_if = { + limit = { has_any_scripted_relation = $CHARACTER$ } + OR = { + has_relation_potential_lover = $CHARACTER$ + has_relation_crush = $CHARACTER$ + } + } + # Not married + NOT = { is_consort_of = $CHARACTER$ } + OR = { + # Pre-existing schemes + is_scheming_against = { + target = $CHARACTER$ + type = seduce + } + is_scheming_against = { + target = $CHARACTER$ + type = courting + } + AND = { + # Sexuality + is_attracted_to_gender_of = $CHARACTER$ + NOR = { + # Proactive + has_trait = chaste + # Undevoted + any_relation = { type = soulmate } + } + # Compatible or attractive + OR = { + trait_compatibility = { + target = $CHARACTER$ + value >= low_positive_trait_compatibility + } + $CHARACTER$.attraction >= medium_positive_attraction + } + } + } + # Flouts the laws of decency + would_attempt_to_seduce_incest_trigger = { CHARACTER = $CHARACTER$ } + # Flouts the sanctity of marriage + would_attempt_to_seduce_married_trigger = yes +} + +would_attempt_to_seduce_incest_trigger = { + trigger_if = { + limit = { + save_temporary_scope_as = potential_cheater + OR = { + # Checks for incest + relation_with_character_is_incestuous_in_faith_trigger = { + FAITH = scope:potential_cheater.faith + CHARACTER = $CHARACTER$ + } + # Check celibate clergy too since it's a similar overcoming of norms + AND = { + is_clergy = yes + faith = { has_doctrine = doctrine_clerical_marriage_allowed } + } + } + } + # Isn't god-fearing + NOT = { has_trait = zealous } + # Is randy + has_trait = lustful + # Takes what they want + ai_boldness >= medium_positive_ai_value + # Likes them + opinion = { + target = $CHARACTER$ + value >= 25 + } + # Big attraction or get on very well + OR = { + trait_compatibility = { + target = $CHARACTER$ + value >= medium_positive_trait_compatibility + } + $CHARACTER$.attraction >= medium_positive_attraction + } + } +} + +would_attempt_to_seduce_married_trigger = { + trigger_if = { + limit = { is_married = yes } + OR = { + # Adultery is accepted for their gender in their faith + AND = { + is_female = yes + faith = { has_doctrine_parameter = adultery_female_accepted } + } + AND = { + is_male = yes + faith = { has_doctrine_parameter = adultery_male_accepted } + } + NOR = { + # Isn't god-fearing + has_trait = zealous + save_temporary_scope_as = potential_cheater + # Isn't that fond of partner + opinion = { + target = scope:potential_cheater.primary_spouse + value >= 25 + } + # Isn't honorable + ai_honor >= low_positive_ai_value + } + } + } +} diff --git a/common/scripted_triggers/00_ai_acceptance_triggers.txt b/common/scripted_triggers/00_ai_acceptance_triggers.txt new file mode 100644 index 00000000..ad9eb7e4 --- /dev/null +++ b/common/scripted_triggers/00_ai_acceptance_triggers.txt @@ -0,0 +1,19 @@ + +###TRIGGER LIST +#ai_will_give_favor_trigger + +#CHAR1 is the character who will be giving the favor, CHAR2 is the character who will be receiving it(i.e., CHAR2 is the one that gets to call in the favor). +ai_will_give_favor_trigger = { + $CHAR1$ = { + NOR = { + has_relation_rival = $CHAR2$ + opinion = { + value <= -25 + target = $CHAR2$ + } + + is_scheming_against = { target = $CHAR2$ type = murder } + } + } +} + diff --git a/common/scripted_triggers/00_ai_value_triggers.txt b/common/scripted_triggers/00_ai_value_triggers.txt new file mode 100644 index 00000000..114a265b --- /dev/null +++ b/common/scripted_triggers/00_ai_value_triggers.txt @@ -0,0 +1,291 @@ + +###TRIGGER LIST +#opposing_ai_values_trigger - Checks if one character has a positive value and another character has a negative value for the same ai value. + +#Needs TARGET and the name of the VALUE +opposing_ai_values_trigger = { + OR = { + AND = { + ai_$VALUE$ < 0 + $TARGET$ = { ai_$VALUE$ > 0 } + } + AND = { + ai_$VALUE$ > 0 + $TARGET$ = { ai_$VALUE$ < 0 } + } + } +} + +ai_has_warlike_personality = { + OR = { + AND = { + has_trait = despoiler_of_byzantium + any_held_title = { + OR = { + empire = title:e_byzantium + empire = title:e_latin_empire + } + } + } + vassal_contract_has_flag = admin_ai_is_warlike # Admin vassals with the "Frontier" administration consider it their job to expand + AND = { # The unity decision "Organize House Members for War" forces AI house members to adopt this stance + exists = house + house = { + has_house_modifier = unity_house_organized_for_war_modifier + } + } + AND = { # They are Detractors during the FP3 Struggle in the Unrest Phase + any_character_struggle = { + trigger_if = { + limit = { is_struggle_type = persian_struggle } + is_struggle_phase = struggle_persia_phase_unrest + } + trigger_else = { always = no } + } + has_trait = fp3_struggle_detractor + } + AND = { # Nomads are not 'unpredictable', they are Warlike instead + government_has_flag = government_is_nomadic + ai_has_cautious_personality = no + economical_ai_guts_trigger = no + } + AND = { + ai_boldness > 0 + ai_greed >= 0 + + OR = { + has_trait = wrathful + has_trait = impatient + has_trait = sadistic + has_trait = ambitious + has_trait = vengeful + has_trait = zealous + has_trait = irritable + AND = { + ai_boldness >= 50 + ai_greed >= 50 + } + AND = { + ai_boldness >= 25 + ai_greed >= 100 + } + AND = { + ai_boldness >= 100 + ai_greed >= 25 + } + government_has_flag = government_is_tribal + culture = { has_cultural_pillar = ethos_bellicose } + } + + NOR = { + ai_compassion >= 75 + has_trait = compassionate + has_trait = craven + has_trait = calm + faith = { has_doctrine_parameter = pacifist_opinion_active } + culture = { has_cultural_parameter = reduced_cost_for_conversion_to_pacifist_faith } + AND = { + exists = house + house = { + has_house_modifier = unity_house_focused_on_economy_modifier + } + } + vassal_contract_has_flag = admin_ai_is_builder + } + } + # Or we're on the warpath. + has_variable = imperial_expedition_charged + } + ai_has_conqueror_personality = no +} + +ai_has_cautious_personality = { + ai_boldness <= 0 + + OR = { + has_trait = paranoid + has_trait = craven + AND = { + ai_boldness <= -25 + OR = { + has_trait = patient + has_trait = calm + has_trait = content + culture = { has_cultural_pillar = ethos_stoic } + culture = { has_cultural_tradition = tradition_stalwart_defenders } + } + } + } + NOR = { + has_trait = fickle + has_trait = lunatic + AND = { + exists = house + house = { + OR = { + has_house_modifier = unity_house_organized_for_war_modifier + has_house_modifier = unity_house_focused_on_economy_modifier + } + } + } + AND = { # They are Detractors during the FP3 Struggle in the Unrest Phase + any_character_struggle = { + is_struggle_type = persian_struggle + is_struggle_phase = struggle_persia_phase_unrest + } + has_trait = fp3_struggle_detractor + } + vassal_contract_has_flag = admin_ai_is_warlike + vassal_contract_has_flag = admin_ai_is_builder + } + ai_has_conqueror_personality = no +} + +ai_has_economical_boom_personality = { + OR = { + vassal_contract_has_flag = admin_ai_is_builder # Admin vassals with the "Civilian" administration consider it their job to improve the economy + AND = { # The unity decision "Encourage House to Improve the Economy" forces AI house members to adopt this stance + exists = house + house = { + has_house_modifier = unity_house_focused_on_economy_modifier + } + } + AND = { + economical_ai_guts_trigger = yes + ai_has_warlike_personality = no + } + } + ai_has_conqueror_personality = no +} + +economical_ai_guts_trigger = { + ai_boldness > 0 + OR = { + has_focus = stewardship_domain_focus # Only this focus, which is 33% of all stewardship focused characters in the world + has_trait = calm + has_trait = patient + has_trait = diligent + has_trait = generous + has_trait = stubborn + has_trait = profligate + has_trait = improvident + has_character_modifier = the_city_builder_modifier + has_character_modifier = the_castle_builder_modifier + has_character_modifier = the_temple_builder_modifier + } + NAND = { + has_trait = greedy + has_trait = impatient + AND = { + exists = house + house = { + has_house_modifier = unity_house_organized_for_war_modifier + } + } + } +} + +ai_wants_low_unity = { + government_has_flag = government_is_clan + # To actively decrease Unity, the AI needs the following personality + OR = { + AND = { + OR = { + has_trait_malicious_trigger = yes + has_trait_dominant_trigger = yes + } + has_trait_submissive_trigger = no + has_trait_benevolent_trigger = no + } + ai_has_warlike_personality = yes + ai_has_conqueror_personality = yes + has_character_flag = agenda_towards_escalation + } +} + +ai_wants_high_unity = { + government_has_flag = government_is_clan + # We'll make sure that the AI only wants to actively increase Unity if they have a matching personality + OR = { + AND = { + OR = { + has_trait_benevolent_trigger = yes + has_trait_submissive_trigger = yes + } + has_trait_malicious_trigger = no + } + ai_has_economical_boom_personality = yes + AND = { + NOT = { has_trait = fp3_struggle_detractor } + # House is the most recent Caliphs house + exists = struggle:persian_struggle + trigger_if = { + limit = { exists = title:d_sunni.holder } + house = title:d_sunni.holder.house + } + trigger_else = { house = title:d_sunni.previous_holder.house } + } + has_character_flag = agenda_towards_deescalation + } + + # And to make sure the AI doesn't want to increase and decrease Unity at the same time + ai_wants_low_unity = no +} + +ai_has_conqueror_personality = { + OR = { + has_trait = conqueror + has_trait = greatest_of_khans + has_character_modifier = the_great_khan_modifier + any_owned_story = { + story_type = story_conqueror + } + } +} + +ai_should_get_conqueror_bonuses = { + AND = { + OR = { + has_game_rule = default_conquerors_bonuses + has_game_rule = extreme_conquerors_bonuses + has_game_rule = random_conquerors_bonuses + has_game_rule = reduced_random_conquerors_bonuses + } + ai_has_conqueror_personality = yes + } +} + +ai_should_get_extreme_conqueror_bonuses = { + AND = { + has_character_modifier = ai_extreme_conqueror_modifier + ai_has_conqueror_personality = yes + } +} + +ai_should_focus_on_building_in_their_capital = { + is_landed = yes + highest_held_title_tier >= tier_county + ai_has_conqueror_personality = no + NOT = { government_has_flag = government_is_nomadic } + exists = capital_county + exists = culture + OR = { + capital_county.title_province.free_building_slots > 0 + AND = { + culture = { has_innovation = innovation_ledger } + capital_county.title_province.combined_building_level <= 4 + } + AND = { + culture = { has_innovation = innovation_baliffs } + capital_county.title_province.combined_building_level <= 6 + } + AND = { + culture = { has_innovation = innovation_guilds } + capital_county.title_province.combined_building_level <= 9 + } + AND = { + culture = { has_innovation = innovation_cranes } + capital_county.title_province.combined_building_level <= 12 + } + } +} diff --git a/common/scripted_triggers/00_artifact_triggers.txt b/common/scripted_triggers/00_artifact_triggers.txt new file mode 100644 index 00000000..f7e72723 --- /dev/null +++ b/common/scripted_triggers/00_artifact_triggers.txt @@ -0,0 +1,2234 @@ + +# Artifact Script Triggers +artifact_value_trigger = { + trigger_if = { + limit = { + exists = $VALUE$ + } + $VALUE$ >= $MIN$ + $VALUE$ < $MAX$ + } + trigger_else_if = { + limit = { + $MIN$ < 50 + } + artifact_low_rarity_trigger = yes + } + trigger_else_if = { + limit = { + $MIN$ > 50 + $MAX$ < 70 + } + artifact_medium_rarity_trigger = yes + } + trigger_else = { + artifact_high_rarity_trigger = yes + } +} + +artifact_region_trigger = { + trigger_if = { + limit = { + any_in_list = { + list = artifact_material_sources + exists = this + } + } + any_in_list = { + list = artifact_material_sources + geographical_region = $REGION$ + } + } + trigger_else_if = { + limit = { + exists = $CHARACTER$ + } + $CHARACTER$ = { + trigger_if = { + limit = { + exists = capital_province + } + capital_province = { geographical_region = $REGION$ } + } + trigger_else_if = { + limit = { exists = location } + location = { geographical_region = $REGION$ } + } + trigger_else = { + #no location + } + } + } + trigger_else_if = { + limit = { exists = scope:artifact.artifact_owner } + scope:artifact.artifact_owner = { + trigger_if = { + limit = { + exists = capital_province + } + capital_province = { geographical_region = $REGION$ } + } + trigger_else_if = { + limit = { exists = location } + location = { geographical_region = $REGION$ } + } + trigger_else = { + #no location + } + } + } + trigger_else = { + trigger_if = { + limit = { + exists = capital_province + } + capital_province = { geographical_region = $REGION$ } + } + trigger_else_if = { + limit = { exists = location } + location = { geographical_region = $REGION$ } + } + trigger_else = { + #no location + } + } +} + +artifact_has_religious_decorations_trigger = { + OR = { + has_artifact_feature = decoration_pattern_war_god + has_artifact_feature = decoration_pattern_religion + has_artifact_feature = decoration_pattern_religious_symbol + has_artifact_feature = decoration_pattern_eschatology + has_artifact_feature = icon_decoration_pattern_saint + } +} + +artifact_has_pattern_trigger = { + artifact_needs_pattern_trigger = yes +} + +artifact_needs_pattern_trigger = { + # Check if one of our artifact features needs a pattern reference + OR = { + # Weapons + has_artifact_feature = blade_decoration_etched_pattern + has_artifact_feature = hilt_decoration_carved_pattern + has_artifact_feature = hilt_decoration_inlay_pattern + has_artifact_feature = head_decoration_etched_pattern + has_artifact_feature = shaft_decoration_painted_pattern + has_artifact_feature = metal_handle_decoration_etched_pattern + + # Armor + has_artifact_feature = armor_decoration_etched_pattern + has_artifact_feature = armor_decoration_inlay_pattern + has_artifact_feature = armor_decoration_painted_pattern + + # Furniture + has_artifact_feature = wood_decoration_painted_pattern + + # Box + has_artifact_feature = box_decoration_painted + has_artifact_feature = box_decoration_carved + + # Bowl + artifact_type = bowl + + # Plate + artifact_type = plate + } +} + +artifact_needs_material_inlay_trigger = { + # Check if one of our artifact features needs a material reference for inlay + OR = { + # Weapons + has_artifact_feature = hilt_decoration_inlay_pattern + has_artifact_feature = hilt_decoration_rounded_pommels + has_artifact_feature = hilt_decoration_twisting + has_artifact_feature = metal_handle_decoration_inlay + + # Armor + has_artifact_feature = armor_decoration_inlay_pattern + + # Box + has_artifact_feature = box_decoration_inlay + + # Alchemy - Elixir + has_artifact_feature = glass_decoration_inlay_pattern + } +} + +artifact_needs_material_wire_trigger = { + # Check if one of our artifact features needs a material reference for precious metal wire or other jewelery-like fastenings + OR = { + # Weapons + has_artifact_feature = hilt_decoration_wires + has_artifact_feature = hilt_decoration_filigree + has_artifact_feature = hilt_decoration_circles + + # Armor + has_artifact_feature = armor_decoration_lining + has_artifact_feature = armor_decoration_embossed + has_artifact_feature = armor_decoration_grouped_rivets + + # Ring + has_artifact_feature = ring_centerpiece_signet + has_artifact_feature = ring_centerpiece_religious + has_artifact_feature = ring_adornment_runes + + # Necklace + artifact_type = necklace + artifact_type = necklace_pedestal + } +} + +artifact_needs_material_cloth_trigger = { + # Check if one of our artifact features needs a material reference for cloth lining + OR = { + # Armor + has_artifact_feature = armor_helmet_nasal + has_artifact_feature = armor_helmet_enclosed + has_artifact_feature = armor_helmet_great_helmet + has_artifact_feature = armor_helmet_cervelliere + } +} + +artifact_needs_material_gem_trigger = { + OR = { + has_artifact_feature = crown_decoration_gems + has_artifact_feature = crown_decoration_filigree_and_gem + has_artifact_feature = brooch_centerpiece_cabochon + has_artifact_feature = brooch_adornment_gems + has_artifact_feature = ring_centerpiece_cabochon + has_artifact_feature = ring_adornment_gems + has_artifact_feature = book_decoration_gems + has_artifact_feature = book_decoration_gems_and_clasp + + artifact_type = necklace + artifact_type = necklace_pedestal + } +} + +artifact_needs_material_hsb_trigger = { + OR = { + has_artifact_feature = wood_decoration_hsb_inlay + has_artifact_feature = shaft_decoration_inlay + } +} + +artifact_needs_material_wood_trigger = { + has_artifact_feature = book_cover_material_wood +} + + +############################ +# Artifact Visual Triggers # +############################ + +# UnitGFX-based triggers +artifact_use_african_unit_visuals_trigger = { + exists = culture + culture = { has_unit_gfx = sub_sahran_unit_gfx } +} + +artifact_use_eastern_unit_visuals_trigger = { + culture = { has_unit_gfx = eastern_unit_gfx } +} + +artifact_use_indian_unit_visuals_trigger = { + culture = { has_unit_gfx = indian_unit_gfx } +} + +artifact_use_mena_unit_visuals_trigger = { + culture = { + OR = { + has_unit_gfx = mena_unit_gfx + has_unit_gfx = iberian_muslim_unit_gfx + } + } +} + +artifact_use_northern_unit_visuals_trigger = { + exists = culture + culture = { + OR = { + has_unit_gfx = norse_unit_gfx + has_unit_gfx = northern_unit_gfx + } + } +} + +artifact_use_mongol_unit_visuals_trigger = { + exists = culture + culture = { has_unit_gfx = mongol_unit_gfx } +} + +artifact_use_western_unit_visuals_trigger = { + exists = culture + culture = { + OR = { + has_unit_gfx = western_unit_gfx + has_unit_gfx = eastern_unit_gfx + has_unit_gfx = iberian_christian_unit_gfx + } + } +} + +artifact_use_iberian_muslim_unit_visuals_trigger = { + exists = culture + culture = { has_unit_gfx = iberian_muslim_unit_gfx } +} + +artifact_use_iberian_christian_unit_visuals_trigger = { + exists = culture + culture = { has_unit_gfx = iberian_christian_unit_gfx } +} + +artifact_use_iranian_unit_visuals_trigger = { + exists = culture + culture = { has_unit_gfx = iranian_unit_gfx } +} + +# BuildingGFX-based triggers +artifact_use_indian_building_visuals_trigger = { + exists = culture + culture = { has_building_gfx = indian_building_gfx } +} + +artifact_use_mena_building_visuals_trigger = { + exists = culture + culture = { has_building_gfx = mena_building_gfx } +} + +artifact_use_mediterranean_building_visuals_trigger = { + exists = culture + culture = { OR = { + has_building_gfx = mediterranean_building_gfx + has_building_gfx = byzantine_building_gfx } + } +} + +artifact_use_byzantine_building_visuals_trigger = { + exists = culture + culture = { has_building_gfx = byzantine_building_gfx } +} + +artifact_use_iberian_building_visuals_trigger = { + exists = culture + culture = { has_building_gfx = iberian_building_gfx } +} + +artifact_use_western_building_visuals_trigger = { + exists = culture + culture = { has_building_gfx = western_building_gfx } +} + +artifact_use_norse_building_visuals_trigger = { + exists = culture + culture = { has_building_gfx = norse_building_gfx } +} + +artifact_use_steppe_building_visuals_trigger = { + exists = culture + culture = { has_building_gfx = steppe_building_gfx } +} + +artifact_use_iranian_building_visuals_trigger = { + exists = culture + culture = { has_building_gfx = iranian_building_gfx } +} + +artifact_use_berber_building_visuals_trigger = { + exists = culture + culture = { has_building_gfx = berber_group_building_gfx } +} + +# GFX Trigger-picker + +artifact_should_use_gfx_type_trigger = { + trigger_if = { + limit = { exists = scope:artifact.creator.culture } + scope:artifact.creator = { artifact_use_$TYPE$_visuals_trigger = yes } + } + trigger_else_if = { #If the creator is not found we use the owner. Often this would be if the creator is a dummy, which has no culture + limit = { exists = culture } + artifact_use_$TYPE$_visuals_trigger = yes + } + trigger_else = { + always = no #We should never get here as all created artifacts should have an owner. + } +} + +artifact_low_rarity_trigger = { + scope:artifact ?= { + OR = { + rarity = masterwork + rarity = common + } + } +} + +artifact_medium_rarity_trigger = { + scope:artifact ?= { + OR = { + rarity = masterwork + rarity = famed + } + } +} + +artifact_high_rarity_trigger = { + scope:artifact ?= { + OR = { + rarity = famed + rarity = illustrious + } + } +} + +artifact_low_wealth_trigger = { + OR = { + NOT = { exists = scope:wealth } + trigger_if = { + limit = { exists = scope:wealth } + scope:wealth < low_high_wealth_cutoff + } + } +} + +artifact_high_wealth_trigger = { + exists = scope:wealth + scope:wealth >= low_high_wealth_cutoff +} + +portrait_should_wield_axe_trigger = { + trigger_if = { + limit = { + any_equipped_character_artifact = { artifact_slot_type = primary_armament } + NOT = { has_variable = temporary_signature_weapon } + } + any_equipped_character_artifact = { artifact_type = axe } + } + trigger_else = { + has_variable = signature_weapon + var:signature_weapon = flag:axe + } +} +portrait_should_wield_hammer_trigger = { + trigger_if = { + limit = { + any_equipped_character_artifact = { artifact_slot_type = primary_armament } + NOT = { has_variable = temporary_signature_weapon } + } + any_equipped_character_artifact = { artifact_type = hammer } + } + trigger_else = { + has_variable = signature_weapon + var:signature_weapon = flag:hammer + } +} +portrait_should_wield_mace_trigger = { + trigger_if = { + limit = { + any_equipped_character_artifact = { artifact_slot_type = primary_armament } + NOT = { has_variable = temporary_signature_weapon } + } + any_equipped_character_artifact = { artifact_type = mace } + } + trigger_else = { + has_variable = signature_weapon + var:signature_weapon = flag:mace + } +} +portrait_should_wield_spear_trigger = { + trigger_if = { + limit = { + any_equipped_character_artifact = { artifact_slot_type = primary_armament } + NOT = { has_variable = temporary_signature_weapon } + } + any_equipped_character_artifact = { artifact_type = spear } + } + trigger_else = { + has_variable = signature_weapon + var:signature_weapon = flag:spear + } +} +portrait_should_wield_dagger_trigger = { + trigger_if = { + limit = { + any_equipped_character_artifact = { artifact_slot_type = primary_armament } + NOT = { has_variable = temporary_signature_weapon } + } + any_equipped_character_artifact = { artifact_type = dagger } + } + trigger_else = { + has_variable = signature_weapon + var:signature_weapon = flag:dagger + } +} +portrait_should_wield_sword_trigger = { + trigger_if = { + limit = { + any_equipped_character_artifact = { artifact_slot_type = primary_armament } + NOT = { has_variable = temporary_signature_weapon } + } + any_equipped_character_artifact = { artifact_type = sword } + } + trigger_else = { + has_variable = signature_weapon + var:signature_weapon = flag:sword + } +} +portrait_should_wield_wooden_sword_trigger = { + has_variable = signature_weapon + var:signature_weapon = flag:wooden_sword +} +# # +################################## +### Artifact Material Triggers ### +################################## +# # + +########################################## +# Woods - Trees and Lumber +# Determines where various trees grow and, as a result, where products made from them is likely to be found +########################################## + +# Found (Almost) Everywhere: +# ash +artifact_feature_wood_ash_trigger = { + exists = scope:wealth + scope:wealth < 50 + scope:wealth >= 0 + NOT = { artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_subsaharan } } +} + +# oak +artifact_feature_wood_oak_trigger = { + always = yes #There must always be an available wood type +} + + +# Widespread Regional Woods - Europe/MENA: +# pine +artifact_feature_wood_pine_trigger = { + trigger_if = { + limit = { exists = scope:wealth } + artifact_value_trigger = { VALUE = scope:wealth MIN = 0 MAX = 50 } + } + trigger_else = { + always = yes + } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_pine_and_fir } +} + +# fir +artifact_feature_wood_fir_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 60 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_pine_and_fir } +} + +# elm +artifact_feature_wood_elm_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 70 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_wood_elm } +} + +# walnut +artifact_feature_wood_walnut_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 40 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_wood_walnut } +} + +# maple +artifact_feature_wood_maple_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 40 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_wood_maple } +} + + +# Widespread Regional Woods - Subsaharan Africa +# fleroya +artifact_feature_wood_fleroya_trigger = { + trigger_if = { + limit = { + exists = scope:wealth + } + artifact_value_trigger = { VALUE = scope:wealth MIN = 0 MAX = 50 } + } + trigger_else = { + always = yes + } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_subsaharan } +} + +# sycomore +artifact_feature_wood_sycomore_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 30 MAX = 80 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_subsaharan } +} + +# padauk +artifact_feature_wood_padauk_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 60 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_padauk } +} + + +# Widespread Regional Woods - India +# sal +artifact_feature_wood_sal_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 20 MAX = 60 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_india } +} + +# rosewood +artifact_feature_wood_rosewood_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 50 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_india_burma } +} + +# satinwood +artifact_feature_wood_satinwood_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 60 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_india_burma } +} + +# teak +artifact_feature_wood_teak_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 70 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_india_burma } +} + +# Local Regional Woods +# yew +artifact_feature_wood_yew_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 30 MAX = 70 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_yew } +} + +# olivewood +artifact_feature_wood_olivewood_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 45 MAX = 85 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_mediterranean } +} + +# coromandel +artifact_feature_wood_coromandel_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 70 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_sri_lanka } +} + +# ebony +artifact_feature_wood_ebony_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 70 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_ebony } +} + +# bamboo +artifact_feature_wood_bamboo_trigger = { + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_bamboo } +} + +# cherry +artifact_feature_wood_cherry_trigger = { + always = yes #There must always be an available wood type +} + +# dogwood +artifact_feature_wood_dogwood_trigger = { + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_dogwood } +} + +# hazel +artifact_feature_wood_hazel_trigger = { + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_hazel } +} + +# hickory +artifact_feature_wood_hickory_trigger = { + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_hickory } +} + +# mulberry +artifact_feature_wood_mulberry_trigger = { + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_mulberry } +} + +# palm +artifact_feature_wood_palm_trigger = { + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_woods_palm } +} + +########################################## +# Cloths +# Woven materials for clothing, tapestries, embroidery, ropes, etc. +########################################## + +# Wool +# - Found literally everywhere +# wool +artifact_feature_cloth_wool_trigger = { + trigger_if = { + limit = { exists = scope:wealth } + artifact_value_trigger = { VALUE = scope:wealth MIN = 0 MAX = 60 } + } + trigger_else = { + always = yes + } +} + +# lambswool +artifact_feature_cloth_lambswool_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 60 MAX = 999 } +} + + +# Silk +# - Found pretty much everywhere but subsaharan Africa. +# silk +artifact_feature_cloth_silk_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 40 MAX = 70 } + NOT = { artifact_region_trigger = { CHARACTER = scope:owner REGION = material_cloth_no_silk } } +} + +# satin +artifact_feature_cloth_satin_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 50 MAX = 80 } + NOT = { artifact_region_trigger = { CHARACTER = scope:owner REGION = material_cloth_no_silk } } +} + +# velvet +artifact_feature_cloth_velvet_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 60 MAX = 90 } + NOT = { artifact_region_trigger = { CHARACTER = scope:owner REGION = material_cloth_no_silk } } +} + +# samite +artifact_feature_cloth_samite_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 70 MAX = 999 } + NOT = { artifact_region_trigger = { CHARACTER = scope:owner REGION = material_cloth_no_silk } } +} + + +# Linen +# - Modern Germany was a major producer of linen, which was exported throughout all of Europe (but not really beyond that) +# linen +artifact_feature_cloth_linen_trigger = { + trigger_if = { + limit = { exists = scope:wealth } + artifact_value_trigger = { VALUE = scope:wealth MIN = 0 MAX = 60 } + } + trigger_else = { + always = yes + } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_cloth_linen } +} + +# fustian +artifact_feature_cloth_fustian_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 40 MAX = 70 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_cloth_linen } + NOT = { scope:owner.religion = religion:judaism_religion } +} + + +# Cotton +# - Cotton has been grown in Egypt since ancient times, spread to Etheopia early on and then in the late medieval period to Europe and India. +# cotton +artifact_feature_cloth_cotton_trigger = { + trigger_if = { + limit = { exists = scope:wealth } + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 70 } + } + trigger_else = { + always = yes + } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_cloth_cotton } +} + + +# British Isles +# worsted_wool +artifact_feature_cloth_worsted_wool_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 60 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_cloth_cotton } + current_date >= 1200.1.1 +} + + +########################################## +# HSB = Horn, Shell, Bone. +# Basically animal-based materials that have a wide array of applications — especially for carving, inlay, or other decorations. +########################################## + +# Common. All regions should have access to at least one of these. +# hsb_camel_bone +artifact_feature_hsb_camel_bone_trigger = { + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_hsb_camel_bone } +} + +# hsb_deer_antler +artifact_feature_hsb_deer_antler_trigger = { + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_hsb_deer_antler } +} + +# hsb_boar_tusk +artifact_feature_hsb_boar_tusk_trigger = { + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_hsb_boar_tusk } +} + +# hsb_seashell +artifact_feature_hsb_seashell_trigger = { + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_hsb_seashell } +} + + +# Rare, Expensive, or Region-Specifc. Not all regions will have access to these. +# hsb_tortoiseshell +artifact_feature_hsb_tortoiseshell_trigger = { + AND = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 50 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_hsb_tortoiseshell } + } +} + +# hsb_mother_of_pearl +artifact_feature_hsb_mother_of_pearl_trigger = { + AND = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 50 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_hsb_mother_of_pearl } + } +} + +# hsb_ivory +artifact_feature_hsb_ivory_native_trigger = { + AND = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 50 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_hsb_ivory_native } + } +} + +# hsb_ivory +artifact_feature_hsb_ivory_imported_trigger = { + AND = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 80 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_hsb_ivory_imported } + } +} + +# hsb_bison_horn +artifact_feature_hsb_bison_horn_trigger = { + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = hunt_animal_bison_region } +} + +# hsb_antelope_horn +artifact_feature_hsb_antelope_horn_trigger = { + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = hunt_animal_antelope_region } +} + +########################################## +# Animal type +# Basically an animal used in an artifact, for example as a wall ornament or hide +########################################## + +# boar +artifact_feature_animal_boar_trigger = { + trigger_if = { + limit = { exists = scope:location } + title_province = { + NOT = { + terrain = desert + terrain = desert_mountains + } + } + } +} + +# lion +artifact_feature_animal_lion_trigger = { + trigger_if = { + limit = { exists = scope:location } + scope:location = { + OR = { + terrain = forest + terrain = jungle + terrain = desert + terrain = oasis + terrain = desert_mountains + } + NOT = { geographical_region = world_europe } + } + } +} + +# tiger +artifact_feature_animal_tiger_trigger = { + trigger_if = { + limit = { exists = scope:location } + scope:location = { + terrain = jungle + geographical_region = world_india + } + } +} + +# bear +artifact_feature_animal_bear_trigger = { + trigger_if = { + limit = { exists = scope:location } + scope:location = { geographical_region = hunt_animal_bear_region } + } +} + +# aurochs +artifact_feature_animal_aurochs_trigger = { + trigger_if = { + limit = { exists = scope:location } + scope:location = { + NOR = { + geographical_region = world_africa + geographical_region = world_india + } + } + } +} + +#lynx +artifact_feature_animal_lynx_trigger = { + trigger_if = { + limit = { exists = scope:location } + scope:location = { + terrain = forest + geographical_region = world_europe + } + } +} + +# leopard +artifact_feature_animal_leopard_trigger = { + trigger_if = { + limit = { exists = scope:location } + scope:location = { hunt_animal_leopard_trigger = yes } + } +} + +########################################## +# Patterns +# Any kind of decorative pattern which can be engraved/painted/drawn on something. +########################################## + +# wolf +artifact_feature_pattern_wolf_trigger = { + trigger_if = { + limit = { + exists = scope:newly_created_artifact + scope:newly_created_artifact = { artifact_type = book } + } + scope:newly_created_artifact = { + OR = { + has_artifact_feature = book_subject_hunter + has_artifact_feature = book_subject_cannibal + has_artifact_feature = book_subject_mystical_animal + has_artifact_feature = book_subject_animals + has_artifact_feature = book_subject_martial + has_artifact_feature = book_subject_intrigue + } + } + } + scope:owner = { + faith = { + NOR = { + has_doctrine = tenet_aniconism + religion = religion:islam_religion + } + } + } +} + +# animals +artifact_feature_pattern_animals_trigger = { + scope:owner = { + faith = { + NOR = { + has_doctrine = tenet_aniconism + religion = religion:islam_religion + } + } + } +} + +# local_animal +artifact_feature_pattern_local_animal_trigger = { + scope:owner = { + faith = { + NOR = { + has_doctrine = tenet_aniconism + religion = religion:islam_religion + } + } + } +} + +# beasts +artifact_feature_pattern_beasts_trigger = { + scope:owner = { + faith = { + NOR = { + has_doctrine = tenet_aniconism + religion = religion:islam_religion + } + } + } +} + +# bird +artifact_feature_pattern_bird_trigger = { + scope:owner = { + faith = { + NOR = { + has_doctrine = tenet_aniconism + religion = religion:islam_religion + } + } + } +} + +# war_god +artifact_feature_pattern_war_god_trigger = { + trigger_if = { + limit = { + exists = scope:newly_created_artifact + scope:newly_created_artifact = { artifact_type = book } + } + scope:newly_created_artifact = { + OR = { + has_artifact_feature = book_subject_martial + has_artifact_feature = book_subject_blademaster + has_artifact_feature = book_subject_hunter + has_artifact_feature = book_subject_mystical_animal + } + } + } + scope:owner = { + faith = { + NOR = { + has_doctrine = tenet_aniconism + has_doctrine = tenet_pacifism + } + } + } +} + +# religion +artifact_feature_pattern_religion_trigger = { + trigger_if = { + limit = { + exists = scope:newly_created_artifact + scope:newly_created_artifact = { artifact_type = book } + } + scope:newly_created_artifact = { has_artifact_feature = book_subject_learning } + } + scope:owner = { + faith = { + NOR = { + has_doctrine = tenet_aniconism + religion = religion:islam_religion + } + } + } +} +# eschatology +artifact_feature_pattern_eschatology_trigger = { + trigger_if = { + limit = { + exists = scope:newly_created_artifact + scope:newly_created_artifact = { artifact_type = book } + } + scope:newly_created_artifact = { + OR = { + has_artifact_feature = book_subject_learning + has_artifact_feature = book_subject_mystic + } + } + } + scope:owner = { + faith = { + NOR = { + has_doctrine = tenet_aniconism + religion = religion:islam_religion + } + } + } +} +# pattern_religious_symbol +artifact_feature_pattern_religious_symbol_trigger = { + trigger_if = { + limit = { + exists = scope:newly_created_artifact + scope:newly_created_artifact = { artifact_type = book } + } + scope:newly_created_artifact = { + OR = { + has_artifact_feature = book_subject_learning + has_artifact_feature = book_subject_mystic + } + } + } + scope:owner = { + faith = { + NOR = { + has_doctrine = tenet_aniconism + religion = religion:islam_religion + } + } + } +} +# gibberish +artifact_feature_pattern_gibberish_trigger = { + trigger_if = { + limit = { + exists = scope:newly_created_artifact + scope:newly_created_artifact = { artifact_type = book } + } + scope:newly_created_artifact = { + OR = { + has_artifact_feature = book_subject_witch + has_artifact_feature = book_subject_mystic + has_artifact_feature = book_subject_lunatic + has_artifact_feature = book_subject_childhood + } + } + } + scope:owner = { + OR = { + has_trait = lifestyle_mystic + has_trait = paranoid + has_trait = lunatic + has_trait = witch + } + } +} +# pattern_culture_symbol +artifact_feature_pattern_culture_symbol_trigger = { + trigger_if = { + limit = { + exists = scope:newly_created_artifact + scope:newly_created_artifact = { artifact_type = book } + } + scope:newly_created_artifact = { + OR = { + has_artifact_feature = book_subject_empire + has_artifact_feature = book_subject_kingdom + has_artifact_feature = book_subject_dynasty + has_artifact_feature = book_subject_stewardship + } + } + } + scope:owner = { + has_royal_court = yes + has_dlc_feature = royal_court + court_grandeur_current_level > 1 + } +} + +# pattern_culture_style +artifact_feature_pattern_culture_style_trigger = { + trigger_if = { + limit = { + exists = scope:newly_created_artifact + scope:newly_created_artifact = { artifact_type = book } + } + scope:newly_created_artifact = { + OR = { + has_artifact_feature = book_subject_empire + has_artifact_feature = book_subject_kingdom + has_artifact_feature = book_subject_dynasty + has_artifact_feature = book_subject_stewardship + } + } + } + scope:owner = { + has_royal_court = yes + has_dlc_feature = royal_court + court_grandeur_current_level > 1 + } +} + +# pattern_dynasty_shield +artifact_feature_pattern_dynasty_shield_trigger = { + trigger_if = { + limit = { + exists = scope:newly_created_artifact + scope:newly_created_artifact = { artifact_type = book } + } + scope:newly_created_artifact = { + OR = { + has_artifact_feature = book_subject_empire + has_artifact_feature = book_subject_kingdom + has_artifact_feature = book_subject_dynasty + has_artifact_feature = book_subject_stewardship + has_artifact_feature = book_subject_diplomacy + } + } + } + exists = scope:owner.dynasty + scope:owner.dynasty = { dynasty_prestige_level > medium_dynasty_prestige_level } +} + +# pattern_dynasty_motifs +artifact_feature_pattern_dynasty_motifs_trigger = { + trigger_if = { + limit = { + exists = scope:newly_created_artifact + scope:newly_created_artifact = { artifact_type = book } + } + scope:newly_created_artifact = { + OR = { + has_artifact_feature = book_subject_empire + has_artifact_feature = book_subject_kingdom + has_artifact_feature = book_subject_dynasty + has_artifact_feature = book_subject_stewardship + has_artifact_feature = book_subject_diplomacy + } + } + } + exists = scope:owner.dynasty + scope:owner.dynasty = { dynasty_prestige_level > medium_dynasty_prestige_level } +} + +# roses +artifact_feature_pattern_roses_trigger = { + always = yes +} + +# floral +artifact_feature_pattern_floral_trigger = { + always = yes +} + +# geometric +artifact_feature_pattern_geometric_trigger = { + always = yes +} + +# quotes +artifact_feature_pattern_quotes_trigger = { + trigger_if = { + limit = { exists = scope:newly_created_artifact } + NOT = { scope:newly_created_artifact = { artifact_type = book } } + } + always = yes +} + +# knots +artifact_feature_pattern_knots_trigger = { + always = yes +} + +# bodies +artifact_feature_pattern_bodies_trigger = { + trigger_if = { + limit = { exists = scope:newly_created_artifact } + scope:newly_created_artifact = { + artifact_type = book + OR = { + has_artifact_feature = book_subject_cannibal + has_artifact_feature = book_subject_deviant + has_artifact_feature = book_subject_intrigue + } + } + } +} + +########################################## +# Metals +# Any mettalic resources used for either functional or decorative purposes. +########################################## + +# Weapon Materials +# wrought_iron +artifact_feature_metal_wrought_iron_trigger = { + always = yes +} + +# folded_iron +artifact_feature_metal_folded_iron_trigger = { + exists = scope:quality + artifact_value_trigger = { VALUE = scope:quality MIN = 50 MAX = 999 } +} + + +# wootz_steel +artifact_feature_metal_wootz_steel_trigger = { + exists = scope:wealth + exists = scope:owner + artifact_value_trigger = { VALUE = scope:wealth MIN = 80 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_metal_wootz } +} + +# damascus_steel +artifact_feature_metal_damascus_steel_trigger = { + exists = scope:wealth + exists = scope:owner + artifact_value_trigger = { VALUE = scope:wealth MIN = 80 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_metal_damascus } +} + +# bulat_steel +artifact_feature_metal_bulat_steel_trigger = { + exists = scope:wealth + exists = scope:owner + artifact_value_trigger = { VALUE = scope:wealth MIN = 80 MAX = 999 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = material_metal_bulat } +} + +# Decorative Materials +# gold +artifact_feature_metal_gold_trigger = { + exists = scope:wealth + scope:wealth >= 60 +} + +# electrum +artifact_feature_metal_electrum_trigger = { + exists = scope:wealth + scope:wealth < 80 + scope:wealth >= 40 +} + +# silver +artifact_feature_metal_silver_trigger = { + exists = scope:wealth + scope:wealth < 60 + scope:wealth >= 20 +} + +# niello +artifact_feature_metal_niello_trigger = { + exists = scope:wealth + scope:wealth < 70 + scope:wealth >= 30 +} + +# brass +artifact_feature_metal_brass_trigger = { + trigger_if = { + limit = { exists = scope:wealth } + scope:wealth < 40 + } + trigger_else = { + always = yes + } +} + +# pewter +artifact_feature_metal_pewter_trigger = { + trigger_if = { + limit = { exists = scope:wealth } + scope:wealth < 30 + } + trigger_else = { + always = yes + } +} + +# bronze +artifact_feature_metal_bronze_trigger = { + trigger_if = { + limit = { exists = scope:wealth } + scope:wealth < 40 + } + trigger_else = { + always = yes + } +} + +# copper +artifact_feature_metal_copper_trigger = { + trigger_if = { + limit = { exists = scope:wealth } + scope:wealth < 40 + } + trigger_else = { + always = yes + } +} + +# clay +artifact_feature_earthware_clay_trigger = { + always = yes +} + +# terracotta +artifact_feature_earthware_terracotta_trigger = { + always = yes +} + +# stone +artifact_feature_earthware_stone_trigger = { + trigger_if = { + limit = { exists = scope:potter } + scope:potter.culture = { has_cultural_pillar = heritage_chinese } + } + trigger_else = { + always = no + } + trigger_if = { + limit = { exists = scope:wealth } + scope:wealth < 80 + } + trigger_else = { + always = yes + } +} + +# porcelain +artifact_feature_earthware_porcelain_trigger = { + trigger_if = { + limit = { exists = scope:potter } + scope:potter.culture = { has_cultural_pillar = heritage_chinese } + } + trigger_else = { + always = no + } + trigger_if = { + limit = { exists = scope:wealth } + scope:wealth >= 60 + } + trigger_else = { + always = no + } +} + + + + +########################################## +# Gemstones +# Natural minerals or organic gemstones (such as amber) used to decorate ob +########################################## + +# Cheap/Common Gems, Everywhere +# rock_crystal +artifact_feature_gem_rock_crystal_trigger = { + trigger_if = { + limit = { + exists = scope:wealth + } + artifact_value_trigger = { VALUE = scope:wealth MIN = 0 MAX = 20 } + } + trigger_else = { + always = yes + } +} + +# jet +artifact_feature_gem_jet_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 10 MAX = 30 } +} + +# agate +artifact_feature_gem_agate_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 20 MAX = 40 } +} + +# onyx +artifact_feature_gem_onyx_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 20 MAX = 40 } +} + + +# Semi-Precious Gems, Everywhere +# jasper +artifact_feature_gem_jasper_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 30 MAX = 50 } +} + +# zircon +artifact_feature_gem_zircon_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 35 MAX = 60 } +} + +# garnet +artifact_feature_gem_garnet_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 40 MAX = 70 } +} + + +# Rare/Precious Gems, Everywhere +# sapphire +artifact_feature_gem_sapphire_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 50 MAX = 999 } +} + +# emerald +artifact_feature_gem_emerald_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 60 MAX = 999 } +} + +# ruby +artifact_feature_gem_ruby_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 70 MAX = 999 } +} + +# Semi-Precious Gems, Regional +# flourite +artifact_feature_gem_flourite_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 20 MAX = 60 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_europe_west_britannia } +} + +# adventurine +artifact_feature_gem_adventurine_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 20 MAX = 60 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_europe_west_iberia } +} + +# amethyst +artifact_feature_gem_amethyst_trigger = { + artifact_value_trigger = { VALUE = scope:wealth MIN = 20 MAX = 60 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_europe_west_francia } +} + +# amber +artifact_feature_gem_amber_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 20 MAX = 70 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = custom_eastern_baltic} +} + +# moonstone +artifact_feature_gem_moonstone_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 20 MAX = 70 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_india } +} + +# turquoise +artifact_feature_gem_turquoise_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 20 MAX = 70 } + OR = { + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_asia_minor } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_middle_east_persia } + } +} + +# carnelian +artifact_feature_gem_carnelian_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 20 MAX = 70 } + OR = { + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_europe_west_germania } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_europe_north } + } +} + + +# Rare/Precious Gems, Regional +# peridot +artifact_feature_gem_peridot_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 40 MAX = 80 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_india_deccan } +} + +# lapis_lazuli +artifact_feature_gem_lapis_lazuli_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 40 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_middle_east_persia } +} + +# opal +artifact_feature_gem_opal_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 40 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_africa_east } +} + +# spinel +artifact_feature_gem_spinel_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 40 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_india_deccan } +} + +# jade +artifact_feature_gem_jade_trigger = { + exists = scope:wealth + artifact_value_trigger = { VALUE = scope:wealth MIN = 40 MAX = 90 } + artifact_region_trigger = { CHARACTER = scope:owner REGION = world_india_bengal } +} + +########################################## +# Books +# +########################################## + +artifact_book_topic_preface_trigger = { + OR = { + has_artifact_feature = book_topic_unification + has_artifact_feature = book_topic_creation + has_artifact_feature = book_topic_restoration + has_artifact_feature = book_topic_martial_troop_compositions + has_artifact_feature = book_topic_martial_military_strategies + has_artifact_feature = book_topic_martial_ancient_military_campaigns + has_artifact_feature = book_topic_diplomacy_court_politics + has_artifact_feature = book_topic_diplomacy_court_alliances + has_artifact_feature = book_topic_diplomacy_art_of_feasting + has_artifact_feature = book_topic_learning_theological_treaties + has_artifact_feature = book_topic_learning_metaphysical_conundrums + has_artifact_feature = book_topic_learning_tome_collections + has_artifact_feature = book_topic_stewardship_trade_routes + has_artifact_feature = book_topic_stewardship_lawmaking + has_artifact_feature = book_topic_stewardship_best_practices_tax_collectors + has_artifact_feature = book_topic_intrigue_poisons + has_artifact_feature = book_topic_intrigue_the_art_of_love + has_artifact_feature = book_topic_medicine_medicine + has_artifact_feature = book_topic_medicine_herbs + has_artifact_feature = book_topic_medicine_witch + has_artifact_feature = book_topic_artifact_book_topic_cannibal + has_artifact_feature = book_topic_lunatic_lunatic + has_artifact_feature = book_topic_mystic_mystic + has_artifact_feature = book_topic_hunter_hunter + has_artifact_feature = book_topic_witch_worship_horned_god + } +} + + +book_subject_martial_trigger = { + OR = { + prowess >= high_skill_rating + has_trait = faith_warrior + has_trait = crusader_king + has_trait = viking + number_of_commander_traits >= 1 + } +} + +book_subject_medicine_trigger = { + OR = { + has_trait = lifestyle_physician + has_trait = lifestyle_herbalist + has_focus = learning_medicine_focus + } +} + +book_subject_medicine_witch_trigger = { + OR = { + has_trait = lifestyle_physician + has_trait = lifestyle_mystic + has_trait = lifestyle_herbalist + has_focus = learning_medicine_focus + is_witch_trigger = yes + } +} + +book_subject_witch_trigger = { + OR = { + has_trait = arrogant + has_trait = witch + } +} + +book_subject_cannibal_trigger = { + OR = { + has_trait = arrogant + has_trait = cannibal + } +} + +book_subject_deviant_trigger = { + OR = { + has_trait = arrogant + has_trait = deviant + } +} + +book_subject_torturer_trigger = { + OR = { + has_trait = torturer + has_trait = sadistic + } +} + +book_subject_animals_trigger = { + OR = { + has_trait = lifestyle_hunter + AND = { + any_owned_story = { story_type = story_cycle_pet_cat } + exists = var:story_cycle_cat_name + } + AND = { + any_owned_story = { story_type = story_cycle_pet_dog } + exists = var:story_cycle_dog_name + } + } +} + +book_topic_martial_military_strategies_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = martial_strategy_focus } + has_trait_rank = { + trait = education_martial + rank >= 2 + } + } +} + +book_topic_martial_ancient_military_campaigns_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = martial_strategy_focus } + has_trait_rank = { + trait = education_martial + rank >= 2 + } + } +} + +book_topic_martial_military_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = martial_strategy_focus } + has_trait_rank = { + trait = education_martial + rank >= 2 + } + } +} + +book_topic_martial_duels_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = martial_chivalry_focus } + has_trait_rank = { + trait = education_martial + rank >= 2 + } + } +} + +book_topic_martial_chivalry_trigger = { + OR = { + has_martial_lifestyle_trait_trigger = yes + has_focus_or_focus_trait_trigger = { FOCUS = martial_chivalry_focus } + has_trait_rank = { + trait = education_martial + rank >= 2 + } + } +} + +book_topic_diplomacy_court_politics_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = diplomacy_majesty_focus } + has_trait_rank = { + trait = education_diplomacy + rank >= 2 + } + } +} + +book_topic_diplomacy_court_alliances_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = diplomacy_majesty_focus } + has_trait_rank = { + trait = education_diplomacy + rank >= 2 + } + } +} + +book_topic_diplomacy_jokes_trigger = { + OR = { #the jokes we tell to hide the pain...! + has_trait = depressed + has_trait = lunatic + has_trait = possessed + } +} + +book_topic_learning_theological_treaties = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = learning_theology_focus } + has_trait_rank = { + trait = education_learning + rank >= 2 + } + } +} + +book_topic_learning_tome_collections_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = learning_scholarship_focus } + has_trait_rank = { + trait = education_learning + rank >= 2 + } + } +} + +book_topic_stewardship_lawmaking_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = stewardship_duty_focus } + has_trait_rank = { + trait = education_stewardship + rank >= 2 + } + } +} + +book_topic_stewardship_best_practices_tax_collectors_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = stewardship_wealth_focus } + has_trait_rank = { + trait = education_stewardship + rank >= 2 + } + } +} + +book_topic_intrigue_poisons_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = intrigue_skulduggery_focus } + has_trait_rank = { + trait = education_intrigue + rank >= 2 + } + } +} + +book_topic_intrigue_punishment_trigger = { + OR = { + has_focus_or_focus_trait_trigger = { FOCUS = intrigue_intimidation_focus } + has_trait_rank = { + trait = education_intrigue + rank >= 2 + } + has_trait = torturer + } +} + +book_topic_intrigue_seduction_trigger = { + OR = { + has_trait = lustful + has_trait = seducer + has_focus = intrigue_temptation_focus + has_trait = deviant + has_trait = rakish + } +} + +book_topic_medicine_herbs_trigger = { + OR = { + has_trait = lifestyle_herbalist + is_witch_trigger = yes + } +} + +book_topic_witch_love_sorcery_trigger = { + OR = { + has_trait = seducer + has_focus = intrigue_temptation_focus + } +} + +book_topic_witch_curse_sorcery_trigger = { + OR = { + dread >= medium_dread + has_trait = sadistic + has_trait = vengeful + has_trait = torturer + has_trait = paranoid + } +} + +# Saintly Bones +saintly_bones_faith_trigger = { # christianity is of the right kind + trigger_if = { + limit = { + OR = { + scope:artifact.var:saint_bone_faith = faith:catholic + scope:artifact.var:saint_bone_faith = faith:orthodox + } + } + OR = { + faith = faith:catholic + faith = faith:orthodox + faith = { has_doctrine = tenet_christian_syncretism } + } + } + trigger_else_if = { + limit = { + OR = { + scope:artifact.var:saint_bone_faith = faith:nestorian + scope:artifact.var:saint_bone_faith = faith:coptic + scope:artifact.var:saint_bone_faith = faith:armenian_apostolic + } + } + OR = { + faith = faith:nestorian + faith = faith:coptic + faith = faith:armenian_apostolic + } + } + trigger_else_if = { + limit = { scope:artifact.var:saint_bone_faith = faith:insular_celtic } + faith = faith:insular_celtic + } + trigger_else = { + OR = { + faith = faith:catholic + faith = faith:orthodox + faith = faith:nestorian + faith = faith:coptic + faith = faith:armenian_apostolic + faith = faith:insular_celtic + faith = { has_doctrine = tenet_christian_syncretism } + } + } +} + +#Used after setting local animal to determine if a skull artifact/trophy can be made from that animal. +can_animal_produce_skull_trigger = { + exists = $VARIABLE$ + NOR = { + $VARIABLE$ = flag:dragon + $VARIABLE$ = flag:hart + $VARIABLE$ = flag:fox + $VARIABLE$ = flag:hare + $VARIABLE$ = flag:lynx + } +} + +# Duel cultures +axe_unique_gfx_trigger = { + culture = { + OR = { + has_clothing_gfx = northern_clothing_gfx + has_clothing_gfx = mongol_clothing_gfx + has_clothing_gfx = byzantine_clothing_gfx + has_clothing_gfx = indian_clothing_gfx + has_clothing_gfx = african_clothing_gfx + has_clothing_gfx = mena_clothing_gfx + has_clothing_gfx = iranian_clothing_gfx + has_clothing_gfx = iberian_christian_clothing_gfx + has_clothing_gfx = iberian_muslim_clothing_gfx + } + } +} + +sword_unique_gfx_trigger = { + culture = { + OR = { + has_clothing_gfx = northern_clothing_gfx + has_clothing_gfx = mongol_clothing_gfx + has_clothing_gfx = byzantine_clothing_gfx + has_clothing_gfx = indian_clothing_gfx + has_clothing_gfx = african_clothing_gfx + has_clothing_gfx = mena_clothing_gfx + has_clothing_gfx = iberian_christian_clothing_gfx + has_clothing_gfx = iberian_muslim_clothing_gfx + has_clothing_gfx = iranian_clothing_gfx + } + } +} + +hammer_unique_gfx_trigger = { + culture = { + OR = { + has_clothing_gfx = african_clothing_gfx + has_clothing_gfx = mongol_clothing_gfx + has_clothing_gfx = indian_clothing_gfx + has_clothing_gfx = mena_clothing_gfx + has_clothing_gfx = iberian_christian_clothing_gfx + has_clothing_gfx = iberian_muslim_clothing_gfx + } + } +} + +dagger_unique_gfx_trigger = { + culture = { + OR = { + has_clothing_gfx = iberian_christian_clothing_gfx + has_clothing_gfx = iberian_muslim_clothing_gfx + has_clothing_gfx = indian_clothing_gfx + } + } +} + +mace_unique_gfx_trigger = { + culture = { + OR = { + has_clothing_gfx = mongol_clothing_gfx + has_clothing_gfx = byzantine_clothing_gfx + has_clothing_gfx = indian_clothing_gfx + has_clothing_gfx = african_clothing_gfx + has_clothing_gfx = mena_clothing_gfx + has_clothing_gfx = iberian_christian_clothing_gfx + has_clothing_gfx = iberian_muslim_clothing_gfx + } + } +} + +spear_unique_gfx_trigger = { + culture = { + OR = { + has_clothing_gfx = indian_clothing_gfx + has_clothing_gfx = mongol_clothing_gfx + has_clothing_gfx = african_clothing_gfx + has_clothing_gfx = mena_clothing_gfx + has_clothing_gfx = iberian_christian_clothing_gfx + has_clothing_gfx = iberian_muslim_clothing_gfx + has_clothing_gfx = iranian_clothing_gfx + } + } +} + +# Scientific Apparatus Availability + +eligible_for_scientific_apparatus_armillary_sphere_trigger = { + has_fp2_dlc_trigger = yes + $CHARACTER$ = { + culture = { has_innovation = innovation_armilary_sphere } + OR = { + # Wide spread in the Arabic world fairly early. + + has_court_language = language_arabic + has_court_language = language_iranian #FP3 addition + + + knows_language = language_arabic + # Becomes commonplace towards the end of the period. + culture = { has_cultural_era_or_later = culture_era_late_medieval } + trigger_if = { + limit = { has_royal_court = yes } + OR = { + has_court_language = language_arabic + # Nerds can import the knowledge. + has_court_type = court_scholarly + } + } + } + } +} + +# Relic War Validity + +relic_war_valid_religious_artefact_trigger = { + exists = var:relic + scope:attacker = { + can_benefit_from_artifact = prev + } + NOT = { + scope:defender = { + can_benefit_from_artifact = prev + } + } +} + +relic_war_valid_struggle_artefact_trigger = { + exists = var:relic + var:relic = flag:iberian_struggle + scope:attacker = { + any_character_struggle = { is_struggle_type = iberian_struggle } + # Plus one of the valid using faiths. + OR = { + islam_or_syncretic_with_islam_trigger = { CHARACTER = scope:attacker } + christianity_or_syncretic_with_christianity_trigger = { CHARACTER = scope:attacker } + } + } + NOT = { scope:attacker.faith = scope:defender.faith } + +} + +relic_war_valid_against_defender_trigger = { + any_character_artifact = { + exists = var:relic + OR = { + # Standard relics. + AND = { + scope:attacker = { + can_benefit_from_artifact = prev + } + NOT = { + scope:defender = { + can_benefit_from_artifact = prev + } + } + } + # Struggle relics. + ## The Bells of Santiago de Compostela. + AND = { + var:relic = flag:iberian_struggle + scope:attacker = { + any_character_struggle = { is_struggle_type = iberian_struggle } + # Plus one of the valid using faiths. + OR = { + islam_or_syncretic_with_islam_trigger = { CHARACTER = scope:attacker } + christianity_or_syncretic_with_christianity_trigger = { CHARACTER = scope:attacker } + } + } + NOT = { scope:attacker.faith = scope:defender.faith } + } + } + } +} + +relic_war_valid_against_defender_vassal_trigger = { + any_vassal_or_below = { + NOT = { + faith = scope:attacker.faith + } + any_character_artifact = { + exists = var:relic + OR = { + # Standard relics. + AND = { + scope:attacker = { + can_benefit_from_artifact = prev + } + NOT = { + scope:defender = { + can_benefit_from_artifact = prev + } + } + } + # Struggle relics. + ## The Bells of Santiago de Compostela. + AND = { + var:relic = flag:iberian_struggle + scope:attacker = { + any_character_struggle = { is_struggle_type = iberian_struggle } + # Plus one of the valid using faiths. + OR = { + islam_or_syncretic_with_islam_trigger = { CHARACTER = scope:attacker } + christianity_or_syncretic_with_christianity_trigger = { CHARACTER = scope:attacker } + } + } + NOT = { scope:attacker.faith = scope:defender.faith } + } + } + } + } +} + +portrait_should_wield_longbow_trigger = { + trigger_if = { + limit = { + any_equipped_character_artifact = { + OR = { + artifact_type = longbow + artifact_type = bow + } + } + } + OR = { + any_equipped_character_artifact = { artifact_type = longbow } + any_equipped_character_artifact = { + artifact_type = bow + creator ?= { artifact_use_indian_unit_visuals_trigger = yes } + } + } + } + trigger_else = { + culture = { + OR = { + has_cultural_tradition = tradition_longbow_competitions + has_clothing_gfx = indian_clothing_gfx + } + } + } +} + +portrait_should_wield_crossbow_trigger = { + any_equipped_character_artifact = { artifact_type = crossbow } +} + +artifact_war_claimable_artifact_trigger = { + artifact_owner = { + is_ruler = yes + target_is_same_character_or_above = scope:defender + } + trigger_if ={ + limit = { + scope:attacker = { is_ai = yes } + } + NOT = { has_variable = cursed_artifact } + artifact_rarity >= 4 #More than masterwork + save_temporary_scope_as = artifact_temp + scope:attacker = { can_benefit_from_artifact = scope:artifact_temp } + } +} + +sword_could_be_longsword_trigger = { + trigger_if = { + limit = { exists = scope:artifact.creator.culture } + scope:artifact.creator.culture = { + has_unit_gfx = western_unit_gfx + has_cultural_era_or_later = culture_era_late_medieval + } + } + trigger_else_if = { #If the creator is not found we use the owner. Often this would be if the creator is a dummy, which has no culture + limit = { exists = culture } + culture = { + has_unit_gfx = western_unit_gfx + has_cultural_era_or_later = culture_era_late_medieval + } + } + trigger_else = { + always = no #We should never get here as all created artifacts should have an owner. + } +} + +any_recent_previous_owner = { + OR = { + previous_owner = $OWNER$ + previous_owner_level_2 = $OWNER$ + previous_owner_level_3 = $OWNER$ + } +} diff --git a/common/scripted_triggers/00_auto_character_triggers.txt b/common/scripted_triggers/00_auto_character_triggers.txt new file mode 100644 index 00000000..b90f6410 --- /dev/null +++ b/common/scripted_triggers/00_auto_character_triggers.txt @@ -0,0 +1,17 @@ +is_valid_auto_title_holder = { + is_capable_adult = yes + is_claimant = no + is_imprisoned = no + trigger_if = { + limit = { + scope:base.primary_title = { has_title_law = female_only_law } + } + is_female = yes + } + trigger_if = { + limit = { + scope:base.primary_title = { has_title_law = male_only_law } + } + is_male = yes + } +} diff --git a/common/scripted_triggers/00_available_for_events_triggers.txt b/common/scripted_triggers/00_available_for_events_triggers.txt index 1dfe91bf..03fa9422 100644 --- a/common/scripted_triggers/00_available_for_events_triggers.txt +++ b/common/scripted_triggers/00_available_for_events_triggers.txt @@ -17,7 +17,7 @@ #can_become_concubine #is_busy_in_events_localised -# For flags that will never be seen by the player and thus don't need to be localised. +# Despite the name, there are rare instances in which these may become visible to the player - if you add to this list, add localization also is_busy_in_events_unlocalised = { OR = { has_character_flag = is_in_diplomacy_foreign_special_event @@ -30,6 +30,7 @@ is_busy_in_events_unlocalised = { has_character_flag = is_in_intrigue_special_event has_character_flag = is_in_learning_special_event has_character_flag = is_in_task_contract_event_chain + has_character_flag = migration_events_1060_rode_ahead } } @@ -318,6 +319,26 @@ is_within_diplo_range = { } } +# This trigger checks if a character is a Nomad +is_nomad = { + government_has_flag = government_is_nomadic + is_ruler = yes +} + +# This trigger checks if a character is a landed Nomad +is_landed_nomad = { + government_has_flag = government_is_nomadic + is_landed = yes + is_ruler = yes +} + +# Checks if a character is a landless nomad with a domicile +is_landless_nomad = { + government_has_flag = government_is_nomadic + is_landed = no + has_domicile = yes +} + # This trigger checks if a character is a landless adventurer is_landless_adventurer = { government_has_flag = government_is_landless_adventurer @@ -327,15 +348,21 @@ is_landless_adventurer = { # This trigger checks if a character is a governor in an admin realm (implying they are landed) is_governor = { - ghas_government = administrative_government + government_has_flag = government_is_administrative is_landed = yes is_independent_ruler = no highest_held_title_tier >= tier_duchy } +is_governor_or_admin_count = { + government_has_flag = government_is_administrative + is_landed = yes + is_independent_ruler = no + highest_held_title_tier >= tier_county +} # Checks if a character is a landless house_head within an admin realm is_landless_administrative = { - has_government = administrative_government + government_has_flag = government_is_administrative is_landed = no is_house_head = yes has_domicile = yes @@ -349,12 +376,13 @@ is_landed_or_landless_administrative = { } } -# Checks if a character is either landed, a landless house head within an admin realm, or a landless adventurer +# Checks if a character is either landed, a landless house head within an admin realm, a landless nomad, or a landless adventurer is_playable_character = { OR = { is_landed = yes is_landless_administrative = yes is_landless_adventurer = yes + is_landless_nomad = yes } } diff --git a/common/scripted_triggers/00_bastard_triggers.txt b/common/scripted_triggers/00_bastard_triggers.txt new file mode 100644 index 00000000..96beac0c --- /dev/null +++ b/common/scripted_triggers/00_bastard_triggers.txt @@ -0,0 +1,220 @@ + + +should_mother_give_house_to_bastard_trigger = { + #Also governs the "should_mother_give_house_to_bastard" scripted rule + trigger_if = { + limit = { NOT = { exists = mother } } + always = no + } + trigger_else_if = { + limit = { NOT = { exists = mother.house } } + always = no + } + trigger_else_if = { + limit = { NOT = { exists = father } } + always = yes + } + trigger_else_if = { + limit = { + real_father = { is_ruler = yes } + mother = { is_ruler = no } + exists = real_father.house + } + always = no + } + trigger_else_if = { + limit = { + real_father = { is_ruler = no } + mother = { is_ruler = yes } + exists = mother.house + } + always = yes + } + trigger_else_if = { + limit = { + mother = { NOT = { exists = house } } + exists = real_father.house + } + always = no + } + trigger_else_if = { + limit = { + real_father = { NOT = { exists = house } } + exists = mother.house + } + always = yes + } + # making the default behavior explicit if no other trigger_(else_)ifs are valid + trigger_else = { + always = yes + } +} + +secret_unmarried_illegitimate_child_is_valid_trigger = { + $TARGET$ = { + is_alive = yes + exists = real_father + exists = mother + NOT = { has_trait = child_of_concubine } + save_temporary_scope_as = temp_child + trigger_if = { + limit = { + exists = father + exists = scope:temp_child.real_father + } + NOT = { father = scope:temp_child.real_father } + } + } +} + +secret_disputed_heritage_is_valid_trigger = { + $TARGET$ = { # Child + is_alive = yes + exists = real_father + exists = father + exists = mother + NOT = { real_father = father } + NOR = { + has_trait = bastard + has_trait = wild_oat + has_trait = legitimized_bastard + } + } +} + +bastard_secret_is_criminal = { + $TARGET$ = { save_temporary_scope_as = criminal_bastard } + $PARTICIPANT$ = { save_temporary_scope_as = criminal_participant } + OR = { + #Mother if female adultery is criminal + scope:criminal_participant = { + scope:criminal_bastard = { mother = scope:criminal_participant } + OR = { + faith = { has_doctrine_parameter = adultery_female_crime } + any_liege_or_above = { faith = { has_doctrine_parameter = adultery_female_crime } } + } + } + #Real father is male adultery is criminal + scope:criminal_participant = { + scope:criminal_bastard = { real_father = scope:criminal_participant } + OR = { + faith = { has_doctrine_parameter = adultery_male_crime } + any_liege_or_above = { faith = { has_doctrine_parameter = adultery_male_crime } } + } + } + } +} + + +bastard_secret_is_shunned = { + # FOR DEBUG PURPOSES -- REMOVE ONCE RESOLVED TODO_CD + assert_if = { + limit = { NOT = { exists = $TARGET$ } } + text = "Empty TARGET was passed to bastard_secret_is_shunned!" + } + assert_if = { + limit = { NOT = { exists = $TARGET$ } } + text = "Empty PARTICIPANT was passed to bastard_secret_is_shunned!" + } + + #Saving bastard & other parent scope + $TARGET$ = { save_temporary_scope_as = bastard } + $PARTICIPANT$ = { save_temporary_scope_as = participant } + + assert_if = { + limit = { NOT = { exists = scope:bastard } } + text = "scope:bastard does not exist in bastard_secret_is_shunned!" + } + assert_if = { + limit = { NOT = { exists = scope:participant } } + text = "scope:participant does not exist in bastard_secret_is_shunned!" + } + assert_if = { + limit = { NOT = { exists = scope:bastard.mother } } + text = "scope:bastard.mother does not exist in bastard_secret_is_shunned!" + } + assert_if = { + limit = { NOT = { exists = scope:bastard.real_father } } + text = "scope:bastard.real_father does not exist in bastard_secret_is_shunned!" + } + + OR = { + #Bastard child: always shunned, never criminal + scope:participant = scope:bastard + #Mother if female adultery is shunned + scope:participant = { + exists = scope:bastard.mother + this = scope:bastard.mother + OR = { + faith = { has_doctrine_parameter = adultery_female_shunned } + any_liege_or_above = { faith = { has_doctrine_parameter = adultery_female_shunned } } + } + } + #Real father is male adultery is shunned + scope:participant = { + exists = scope:bastard.real_father + this = scope:bastard.real_father + OR = { + faith = { has_doctrine_parameter = adultery_male_shunned } + any_liege_or_above = { faith = { has_doctrine_parameter = adultery_male_shunned } } + } + } + #Either parent if incest is shunned + AND = { + # Can't have incest with only one parent! + exists = scope:bastard.real_father + exists = scope:bastard.mother + + # Also the secret participant has to be one of the parents + scope:participant = { + OR = { + this = scope:bastard.mother + this = scope:bastard.real_father + } + trigger_if = { + limit = { this = scope:bastard.mother } + scope:bastard.real_father = { save_temporary_scope_as = other_parent } + } + trigger_else = { + scope:bastard.mother = { save_temporary_scope_as = other_parent } + } + + # Check if the relation would be incestuous in my faith or my liege's faith + relation_with_character_is_incestuous_in_faith_trigger = { + CHARACTER = scope:other_parent + FAITH = scope:participant.faith + } + any_liege_or_above = { + save_temporary_scope_as = liege_or_above + scope:participant = { + relation_with_character_is_incestuous_in_faith_trigger = { + CHARACTER = scope:other_parent + FAITH = scope:liege_or_above.faith + } + } + } + } + } + } + NOT = { + bastard_secret_is_criminal = { + TARGET = scope:bastard + PARTICIPANT = scope:participant + } + } +} + +has_any_bastard_trait_trigger = { + OR = { + has_trait = wild_oat + has_any_negative_bastard_trait_trigger = yes + } +} + +has_any_negative_bastard_trait_trigger = { + OR = { + has_trait = bastard + has_trait = legitimized_bastard + has_trait = disputed_heritage + } +} diff --git a/common/scripted_triggers/00_birth_triggers.txt b/common/scripted_triggers/00_birth_triggers.txt new file mode 100644 index 00000000..8bd2637a --- /dev/null +++ b/common/scripted_triggers/00_birth_triggers.txt @@ -0,0 +1,59 @@ + +### Birth trigger list + + +birth_will_happen_as_usual_trigger = { + OR = { + has_character_flag = birth_will_go_smoothly + has_character_flag = birth_child_will_become_sickly + has_character_flag = birth_mother_will_become_ill + } +} + +allow_naming_on_birth_of_child_trigger = { + save_temporary_scope_as = naming_parent + exists = $CHILD$ + is_ai = no + is_close_family_of = $CHILD$ + OR = { + #I am the only player parent of child + NOT = { + $CHILD$ = { + any_parent = { + is_ai = no + NOT = { this = scope:naming_parent } + } + } + } + #I am the best player to name this child + AND = { + $CHILD$ = { #There are two player parents + exists = father + exists = mother + NOT = { any_parent = { is_ai = yes } } + } + OR = { + AND = { #They are of my dynasty, not theirs + dynasty = $CHILD$.dynasty + $CHILD$ = { + any_parent = { + NOT = { this = scope:naming_parent } + NOT = { dynasty = $CHILD$.dynasty } + } + } + } + AND = { #I am their mother, and parents are of same dynasty/neither has baby's dynasty + $CHILD$ = { mother = { this = scope:naming_parent } } + OR = { + $CHILD$.mother.dynasty = $CHILD$.father.dynasty + NOR = { + $CHILD$.mother.dynasty = $CHILD$.dynasty + $CHILD$.father.dynasty = $CHILD$.dynasty + } + } + } + } + } + } +} + diff --git a/common/scripted_triggers/00_board_game_scripted_triggers.txt b/common/scripted_triggers/00_board_game_scripted_triggers.txt new file mode 100644 index 00000000..90d817e7 --- /dev/null +++ b/common/scripted_triggers/00_board_game_scripted_triggers.txt @@ -0,0 +1,76 @@ + +################################################## +# GENERIC TRIGGERS + +# Note: this is a very stripped down trigger set. It's expected that it'll be parsed through something that parses out more typically unsuitable candidates (e.g., prisoners under most circumstances). +bg_can_start_board_game_trigger = { + # Check for the usual stuff. + can_start_board_game_eligibility_checks_trigger = yes + # And filter out those who can never play a board game. + bg_can_start_board_game_is_scope_banned_checks_trigger = no +} + +can_start_board_game_eligibility_checks_trigger = { + # Children need to be old enough to know to not eat the playing pieces. + age >= 8 + # Otherwise, we're actually pretty forgiving of basically everyone being able to play somehow. For now. +} + +bg_can_start_board_game_is_scope_banned_checks_trigger = { + # Currently, we just *always* filter anyone who's already in a bout. + exists = var:engaged_in_board_game +} + +################################################## +# INTERACTION TRIGGERS + +bg_game_type_region_pachisi_trigger = { + OR = { + geographical_region = world_india + geographical_region = world_burma + } +} + +bg_game_type_region_hnefatafl_trigger = { + NOT = { geographical_region = board_game_fidchell_region } + OR = { + geographical_region = world_europe_north + geographical_region = world_europe_west_britannia + } +} + +bg_game_type_region_tabula_trigger = { + OR = { + geographical_region = world_asia_minor + geographical_region = world_europe_south + } +} + +bg_game_type_region_go_trigger = { + geographical_region = world_tibet +} + +bg_game_type_region_fidchell_trigger = { + geographical_region = board_game_fidchell_region +} + +bg_stake_land_valid_neighbouring_county_to_trade_trigger = { + tier = tier_county + # Suppress a false positive error. + trigger_if = { + limit = { tier = tier_county } + NOT = { this = prev.capital_county } + any_neighboring_county = { + # Ensure that they're swappable. + OR = { + # Generally, the county should be held by the other character. + holder = $NEIGHBOUR$ + # But OCMs can be traded too. + holder = { + liege = $NEIGHBOUR$ + sub_realm_size = 1 + } + } + } + } +} diff --git a/common/scripted_triggers/00_building_requirement_triggers.txt b/common/scripted_triggers/00_building_requirement_triggers.txt new file mode 100644 index 00000000..cb35e57e --- /dev/null +++ b/common/scripted_triggers/00_building_requirement_triggers.txt @@ -0,0 +1,789 @@ +###################################################################### +# Government +###################################################################### + +building_requirement_tribal = { + scope:holder ?= { + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + } +} + +building_requirement_tribal_holding_in_county = { + NOT = { + county = { + any_county_province = { + has_holding_type = tribal_holding + } + } + } +} + +building_requirement_nomad = { + scope:holder ?= { + government_has_flag = government_is_nomadic + } +} + +building_requirement_nomad_holding_in_county = { + NOT = { + county = { + any_county_province = { + has_holding_type = nomad_holding + } + } + } +} + +building_requirement_herder = { + scope:holder ?= { + government_has_flag = government_is_herder + } +} + +building_requirement_herder_holding_in_county = { + NOT = { + county = { + any_county_province = { + has_holding_type = herder_holding + } + } + } +} + +###################################################################### +# Holding Level +###################################################################### + +building_requirement_castle_city_church = { + trigger_if = { + limit = { has_holding_type = castle_holding } + has_building_or_higher = castle_$LEVEL$ + } + trigger_else_if = { + limit = { has_holding_type = city_holding } + has_building_or_higher = city_$LEVEL$ + } + trigger_else_if = { + limit = { has_holding_type = church_holding } + has_building_or_higher = temple_$LEVEL$ + } + trigger_else = { + custom_description = { + text = "building_requirement_castle_city_church_failed" + always = no + } + } +} + +###################################################################### +# Special +###################################################################### + +building_hall_of_heroes_requirement = { + custom_description = { + text = building_requirement_hall_of_heroes_failed + has_variable = hall_of_heroes + scope:holder = { + OR = { + has_religion = religion:baltic_religion + has_religion = religion:slavic_religion + has_religion = religion:finno_ugric_religion + has_religion = religion:siberian_religion + } + } + } +} + +building_university_requirement = { + #has_variable = university +} + +###################################################################### +# Terrain +###################################################################### + +building_common_tradeport_requirement_terrain = { + OR = { + is_coastal = yes + is_riverside_province = yes + } +} + +building_pastures_requirement_terrain = { + OR = { + terrain = farmlands + terrain = plains + terrain = steppe + terrain = desert + terrain = drylands + terrain = oasis + terrain = mountains + terrain = desert_mountains + terrain = hills + terrain = floodplains + AND = { + terrain = jungle + NOT = { geographical_region = world_innovation_elephants } + } + } +} + +building_hunting_grounds_requirement_terrain = { + OR = { + terrain = plains + terrain = drylands + terrain = steppe + terrain = hills + terrain = taiga + terrain = forest + terrain = jungle + terrain = wetlands + } +} + +building_orchards_requirement_terrain = { + OR = { + terrain = floodplains + terrain = oasis + has_building_or_higher = qanats_05 + AND = { + culture = { + has_cultural_parameter = vegetarian_fruit_orchard_allowed + } + } + } +} + +building_farm_estates_requirement_terrain = { + terrain = farmlands +} + +building_military_camps_requirement_terrain = { + #OR = { # All Terrains + # terrain = farmlands + # terrain = plains + # terrain = drylands + # terrain = desert + # terrain = oasis + # terrain = floodplains + # terrain = steppe + # terrain = mountains + # terrain = desert_mountains + # terrain = wetlands + # terrain = forest + # terrain = taiga + # terrain = jungle + # terrain = hills + #} +} + +building_regimental_grounds_requirement_terrain = { + OR = { + terrain = floodplains + terrain = farmlands + } +} + +building_ramparts_requirement_terrain = { + OR = { + terrain = taiga + terrain = forest + terrain = jungle + } +} + +building_curtain_walls_requirement_terrain = { + OR = { + terrain = farmlands + terrain = plains + terrain = wetlands + terrain = floodplains + } +} + +building_watchtowers_requirement_terrain = { + OR = { + terrain = desert + terrain = drylands + terrain = oasis + terrain = steppe + } +} + +building_cereal_fields_requirement_terrain = { + OR = { + terrain = farmlands + terrain = plains + terrain = drylands + terrain = floodplains + county = { + OR = { + has_county_modifier = fertile_desert_mountains_modifier + has_county_modifier = dodekapolis_modifier + } + } + has_building_or_higher = qanats_05 + } +} + +building_outposts_requirement_terrain = { + OR = { + terrain = wetlands + terrain = taiga + terrain = forest + terrain = jungle + } +} + +building_barracks_requirement_terrain = { + #OR = { + # terrain = farmlands + # terrain = plains + # terrain = drylands + # terrain = floodplains # new + # terrain = hills + # terrain = mountains + # terrain = forest + # terrain = taiga + # terrain = jungle + # terrain = wetlands + # terrain = steppe + #} +} + +building_camel_farms_requirement_terrain = { + geographical_region = world_innovation_camels # new + OR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + terrain = floodplains + terrain = drylands # new + } +} + +building_stables_requirement_terrain = { + # All terrains +} + +building_smiths_requirement_terrain = { + # All terrains +} + +building_workshops_requirement_terrain = { + # All terrains +} + +building_logging_camps_requirement_terrain = { + OR = { + terrain = taiga + terrain = forest + terrain = jungle + } +} + +building_peat_quarries_requirement_terrain = { + terrain = wetlands +} + +building_hill_farms_requirement_terrain = { + terrain = hills +} + +building_elephant_pens_requirement_terrain = { + terrain = jungle + OR = { + geographical_region = world_innovation_elephants + culture = { has_cultural_parameter = elephant_pens_building_bonuses } + } +} + +building_horse_pastures_requirement_terrain = { + OR = { + terrain = steppe + geographical_region = world_steppe_east + culture = { has_cultural_parameter = unlock_horse_pastures_building } + } +} + +building_plantations_requirement_terrain = { + OR = { + terrain = drylands + terrain = desert + terrain = oasis + } +} + +building_quarries_requirement_terrain = { + OR = { + terrain = mountains + terrain = desert_mountains + culture = { has_cultural_parameter = can_build_quarries_everywhere } + } +} + +building_warrior_lodges_requirement_terrain = { + OR = { + AND = { + OR = { + terrain = mountains + terrain = desert_mountains + terrain = hills + } + NOT = { geographical_region = world_horse_buildings_in_hills_and_mountains } + } + culture = { has_cultural_parameter = warrior_lodges_lift_restrictions } + } +} + +building_hillside_grazing_requirement_terrain = { + OR = { + terrain = mountains + terrain = desert_mountains + terrain = hills + } + geographical_region = world_horse_buildings_in_hills_and_mountains +} + +building_wind_furnace_requirement_terrain = { + geographical_region = world_india + OR = { + is_coastal = yes + AND = { + scope:holder.top_liege = { + any_realm_county = { + any_county_province = { + has_building_or_higher = konasamudram_mines_01 + } + } + } + duchy = { + any_de_jure_county = { + any_county_province = { + has_building_or_higher = konasamudram_mines_01 + } + } + } + } + + } + + scope:holder.culture = { has_innovation = innovation_wootz_steel } +} + +building_hill_forts_requirement_terrain = { + OR = { + terrain = mountains + terrain = desert_mountains + terrain = hills + } +} + +building_windmills_requirement_terrain = { + county ?= { + any_county_province = { + OR = { + terrain = farmlands + terrain = plains + terrain = hills + is_coastal = yes + } + } + } +} + +building_watermills_requirement_terrain = { + county ?= { + any_county_province = { + OR = { + terrain = mountains + terrain = wetlands + terrain = forest + terrain = taiga + terrain = jungle + is_riverside_province = yes + } + } + } +} + +building_caravanserai_requirement_terrain = { + county ?= { + any_county_province = { + OR = { + terrain = drylands + terrain = desert + terrain = oasis + terrain = floodplains + terrain = steppe + terrain = desert_mountains + AND = { + geographical_region = world_europe_west_iberia + has_global_variable = fp2_struggle_conciliation_ending + } + } + } + } +} + +building_qanats_requirement_terrain = { + county ?= { + any_county_province = { + OR = { + terrain = hills + terrain = mountains + terrain = desert_mountains + terrain = desert + terrain = drylands + } + culture = { has_cultural_parameter = unlocks_qanat_building } + } + } +} + +building_hospices_requirement_terrain = { + +} + +has_any_special_mine_trigger = { + OR = { + has_building_or_higher = rammelsberg_mines_01 + has_building_or_higher = kutna_hora_mines_01 + has_building_or_higher = kremnica_mines_01 + has_building_or_higher = falun_mines_01 + has_building_or_higher = schwaz_mines_01 + has_building_or_higher = argentiera_mines_01 + has_building_or_higher = kollur_mines_01 + has_building_or_higher = siderokausia_mines_01 + has_building_or_higher = mali_mines_01 + has_building_or_higher = konasamudram_mines_01 + has_building_or_higher = dean_mines_01 + has_building_or_higher = zawar_mines_01 + has_building_or_higher = takkeda_mines_01 + has_building_or_higher = khetri_mines_01 + has_building_or_higher = taghaza_mines_01 + has_building_or_higher = ijil_mines_01 + has_building_or_higher = turda_mines_01 + has_building_or_higher = phocaea_mines_01 + has_building_or_higher = pansjhir_mines_01 + has_building_or_higher = trepca_mines_01 + has_building_or_higher = rudnik_mines_01 + has_building_or_higher = cevennes_mines_01 + has_building_or_higher = allaq_mines_01 + has_building_or_higher = verespatak_mines_01 + has_building_or_higher = nishapur_mines_01 + has_building_or_higher = srebrenica_mines_01 + has_building_or_higher = ratnapura_mines_01 + } +} + +###################################################################### +# Baronies that cannot have a holding (intended for Sahara) +###################################################################### + +barony_cannot_construct_holding = { + barony.title_province = { + OR = { + terrain = desert + terrain = desert_mountains + } + geographical_region = world_africa_sahara + } +} + +###################################################################### +# Triggers for add_random_building_effect script effect +###################################################################### + +# is any existing building of the checked tier? (e.g. 02) +has_any_building_of_level_trigger = { + OR = { + has_building = outposts_$BUILDING_LEVEL$ + has_building = logging_camps_$BUILDING_LEVEL$ + has_building = peat_quarries_$BUILDING_LEVEL$ + has_building = hill_forts_$BUILDING_LEVEL$ + has_building = plantations_$BUILDING_LEVEL$ + has_building = quarries_$BUILDING_LEVEL$ + has_building = hunting_grounds_$BUILDING_LEVEL$ + has_building = military_camps_$BUILDING_LEVEL$ + has_building = pastures_$BUILDING_LEVEL$ + has_building = ramparts_$BUILDING_LEVEL$ + has_building = curtain_walls_$BUILDING_LEVEL$ + has_building = watchtowers_$BUILDING_LEVEL$ + has_building = cereal_fields_$BUILDING_LEVEL$ + has_building = barracks_$BUILDING_LEVEL$ + has_building = camel_farms_$BUILDING_LEVEL$ + has_building = hill_farms_$BUILDING_LEVEL$ + has_building = elephant_pens_$BUILDING_LEVEL$ + has_building = common_tradeport_$BUILDING_LEVEL$ + has_building = orchards_$BUILDING_LEVEL$ + has_building = farm_estates_$BUILDING_LEVEL$ + has_building = regimental_grounds_$BUILDING_LEVEL$ + has_building = monastic_schools_$BUILDING_LEVEL$ + } +} + +# is any existing building a lower tier than compare building? +has_lesser_building_trigger = { + trigger_if = { + limit = { has_building_or_higher = $COMPARE$_02 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 } + } + trigger_else_if = { + limit = { has_building_or_higher = $COMPARE$_03 } + OR = { + has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 02 } + } + } + trigger_else_if = { + limit = { has_building_or_higher = $COMPARE$_04 } + OR = { + has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 02 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 03 } + } + } + trigger_else_if = { + limit = { has_building_or_higher = $COMPARE$_05 } + OR = { + has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 02 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 03 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 04 } + } + } + trigger_else_if = { + limit = { has_building_or_higher = $COMPARE$_06 } + OR = { + has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 02 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 03 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 04 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 05 } + } + } + trigger_else_if = { + limit = { has_building_or_higher = $COMPARE$_07 } + OR = { + has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 02 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 03 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 04 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 05 } + has_any_building_of_level_trigger = { BUILDING_LEVEL = 06 } + } + } + trigger_else = { always = no } # Must already be highest tier possible +} + +# can this building be added? +add_random_building_trigger = { + building_$BUILDING$_requirement_terrain = yes # terrain fits building type + trigger_if = { # if all slots are full, this building type exists already + limit = { free_building_slots = 0 } + has_building_or_higher = $BUILDING$_01 + NOT = { + has_lesser_building_trigger = { COMPARE = $BUILDING$ } + } + } + trigger_else = { + NOT = { has_building_or_higher = $BUILDING$_01 } + } +} + +# Innovation and holding level triggers for most economic buildings +generic_economic_building_innovation_trigger = { + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_01 } + scope:build_owner.culture = { has_innovation = innovation_crop_rotation } + } + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_02 } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:build_owner.culture = { has_innovation = innovation_manorialism } + } + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_04 } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:build_owner.culture = { has_innovation = innovation_guilds } + } + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_06 } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:build_owner.culture = { has_innovation = innovation_cranes } + } +} + +# Innovation and holding level triggers for most fortification buildings +generic_fortification_building_innovations_trigger = { + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_01 } + scope:build_owner.culture = { has_innovation = innovation_motte } + } + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_02 } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:build_owner.culture = { has_innovation = innovation_battlements } + } + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_04 } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:build_owner.culture = { has_innovation = innovation_hoardings } + } + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_06 } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:build_owner.culture = { has_innovation = innovation_machicolations } + } +} + +# Innovation and holding level triggers for most recruitment buildings +generic_recruitment_building_innovations_trigger = { + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_01 } + scope:build_owner.culture = { has_innovation = innovation_barracks } + } + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_02 } + building_requirement_castle_city_church = { LEVEL = 02 } + scope:build_owner.culture = { has_innovation = innovation_burhs } + } + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_04 } + building_requirement_castle_city_church = { LEVEL = 03 } + scope:build_owner.culture = { has_innovation = innovation_castle_baileys } + } + trigger_if = { + limit = { has_building_or_higher = $BUILDING$_06 } + building_requirement_castle_city_church = { LEVEL = 04 } + scope:build_owner.culture = { has_innovation = innovation_royal_armory } + } +} + +islamic_special_building_trigger = { + OR = { + has_building = holy_site_great_mosque_of_djenne_01 + has_building = holy_site_great_mosque_of_samarra_01 + has_building = holy_site_prophetic_mosque_01 + has_building = hagia_sophia_02 + has_building = the_friday_mosque_01 # shared zoroastrian + has_building = holy_site_great_mosque_of_cordoba_01 # shared christian + has_building_or_higher = damascus_mosque_01 + } +} + +christian_special_building_trigger = { + OR = { + has_building = holy_site_cologne_cathedral_01 + has_building = holy_site_canterbury_cathedral_01 + has_building = holy_site_canterbury_cathedral_02 + has_building = holy_site_canterbury_cathedral_03 + has_building = temple_of_uppsala_01 + has_building = temple_of_uppsala_02 + has_building = lund_cathedral_01 + has_building = holy_site_great_mosque_of_cordoba_01 # shared muslim + has_building_or_higher = cluny_abbey_01 + has_building_or_higher = beta_giyorgis_01 + has_building_or_higher = holy_wisdom_01 + has_building_or_higher = duomo_florence_01 + has_building_or_higher = wawel_cathedral_01 + } +} + +eastern_special_building_trigger = { + OR = { + has_building = buddhas_of_bamian_01 + has_building = brihadeeswarar_temple_01 + has_building = shwedagon_pagoda_01 + has_building = ananda_temple_01 + has_building = khajuraho_01 + has_building_or_higher = jokhang_01 + has_building_or_higher = konark_temple_01 + has_building_or_higher = vatapi_caves_01 + } +} + +# Religious special building triggers +religious_special_building_exclusion_trigger = { # checks if any special buildings present do not fit your religion + OR = { + AND = { # Generic + NOT = { + barony = { is_holy_site_of = holder.faith } + } + OR = { + has_building = holy_site_cathedral_01 + has_building = holy_site_mosque_01 + has_building = holy_site_pagan_grand_temple_01 + has_building = holy_site_indian_grand_temple_01 + has_building = holy_site_other_grand_temple_01 + has_building = hagia_sophia_01 + has_building = holy_site_mahabodhi_temple_01 + has_building = holy_site_imam_ali_mosque_01 + has_building = holy_site_great_mosque_of_mecca_01 + islamic_special_building_trigger = yes + christian_special_building_trigger = yes + } + } + AND = { # Islamic + NOT = { barony.holder.religion = religion:islam_religion } + islamic_special_building_trigger = yes + } + AND = { # Christian + NOT = { barony.holder.religion = religion:christianity_religion } + christian_special_building_trigger = yes + } + AND = { # Islamic/Zoroastrian + NOT = { barony.holder.religion = religion:zoroastrianism_religion } + has_building = the_friday_mosque_01 # shared muslim + } + AND = { # Eastern family + NOR = { + ROOT.religion = religion:hinduism_religion + ROOT.religion = religion:buddhism_religion + ROOT.religion = religion:jainism_religion + ROOT.religion = religion:taoism_religion + ROOT.religion = religion:zoroastrianism_religion + } + eastern_special_building_trigger = yes + } + # Judaism + AND = { + barony.holder.religion = religion:judaism_religion + has_building = dome_of_the_rock_01 + } + AND = { + NOT = { barony.holder.religion = religion:judaism_religion } + has_building = temple_in_jerusalem_01 + } + } +} + +building_murex_farm_requirement_terrain = { + is_county_capital = yes + is_coastal = yes + geographical_region = mediteranean_coast + NOR = { + this.barony = title:b_salmydessus + this.barony = title:b_chelai + } +} + +building_breweries_requirement = { + OR = { + AND = { + has_building_or_higher = temple_$NUMBER$ + OR = { + faith = faith:catholic + faith = { has_doctrine_parameter = allows_brewery } + } + } + AND = { + has_building_or_higher = city_$NUMBER$ + culture = { has_cultural_parameter = allows_brewery } + } + } +} diff --git a/common/scripted_triggers/00_childhood_triggers.txt b/common/scripted_triggers/00_childhood_triggers.txt new file mode 100644 index 00000000..03814f5f --- /dev/null +++ b/common/scripted_triggers/00_childhood_triggers.txt @@ -0,0 +1,362 @@ +@infant_upper_age_threshold_value = 2 +@teen_lower_threshold_value = 13 +@teen_upper_threshold_value = 19 + +child_is_infant_trigger = { + age <= @infant_upper_age_threshold_value + is_adult = no +} + +# Duplicated because there were some weird edge case OR uses where "child_is_infant_trigger = no" read _extremely_ confusingly. +child_not_infant_trigger = { + age > @infant_upper_age_threshold_value + is_adult = no +} + +# At what point is it not weird to hear a child using (relatively) advanced reasoning & so able to hold an extended conversation? +child_can_have_full_conversations_trigger = { + age >= 6 + is_adult = no +} + +child_not_teen_trigger = { + child_not_infant_trigger = yes + age < @teen_lower_threshold_value + is_adult = no +} + +# Duplicated because there were some weird edge case OR uses where "child_not_teen_trigger = no" read _extremely_ confusingly. +child_is_teen_trigger = { + age >= @teen_lower_threshold_value + is_adult = no +} + +child_old_enough_for_responsibility_trigger = { + age >= 8 + is_adult = no +} + +# Note: we don't want to say that children below this definitely can't read, that's a lot of edge cases to account for, but it's convenient to roughly unified trigger we can check for whether pensive characters are more likely to read or be read to. +child_likely_reader_trigger = { age >= 7 } + +character_is_teen_trigger = { + age >= @teen_lower_threshold_value + age <= @teen_upper_threshold_value +} + +character_is_teen_or_older_trigger = { + age > @teen_lower_threshold_value +} + +save_good_friend_character_trigger_check = { + is_adult = no + age >= root.age_dif_child_down_friend + age <= root.age_dif_child_up_friend + NOT = { this = root } + is_imprisoned = no + opinion = { + target = root + value > -10 + } + NOR = { + has_relation_friend = root + has_any_bad_relationship_with_root_trigger = yes + } +} + + +save_good_crush_character_trigger_check = { + is_adult = no + age >= root.age_dif_child_down + age <= root.age_dif_child_up + age > childhood_education_start_age + NOT = { this = root } + is_imprisoned = no + is_close_family_of_root_trigger = no + NOR = { + root = { has_relation_crush = prev } + has_relation_victim = root + } + OR = { + has_sexuality = heterosexual + has_sexuality = bisexual + has_sexuality = homosexual + } + is_attracted_to_gender_of = root + root = { is_attracted_to_gender_of = prev } + OR = { + num_of_relation_crush <= 2 + has_trait = lustful + } +} + +save_good_bully_character_trigger_check = { + is_adult = no + age >= 6 + age >= root.age + NOT = { this = root } + is_imprisoned = no + OR = { + has_trait_malicious_trigger = yes + has_trait_dominant_trigger = yes + has_trait_emotional_trigger = yes + } + NOR = { + has_trait = compassionate + has_trait_submissive_trigger = yes + } + opinion = { + target = root + value < 0 + } + NOR = { + has_any_bad_relationship_with_root_trigger = yes + has_relation_victim = root + has_relation_friend = root + has_relation_crush = root + } +} + +save_good_victim_character_trigger_check = { + is_adult = no + age >= 6 + age <= root.age + NOT = { this = root } + is_imprisoned = no + reverse_opinion = { + target = root + value < 0 + } + NOR = { + has_any_bad_relationship_with_root_trigger = yes + has_relation_victim = root + has_relation_friend = root + has_relation_crush = root + } +} + +child_suitable_to_play_with_character = { + # Is available for events at $CHARACTER$'s locale. + is_available_child = yes + exists = location + location = $CHARACTER$.location + # Of a suitable age range. + child_not_infant_trigger = yes + # Doesn't have a bad relationship with $CHARACTER$. + NOT = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = $CHARACTER$ } + } +} + +child_suitable_to_play_with_character_one_sided = { + child_suitable_to_play_with_character = { CHARACTER = $CHARACTER$ } + is_ai = yes +} + + + +childhood_mean_child_trigger = { + OR = { + has_trait = rowdy + has_personality_malicious_trigger = yes + has_personality_dominant_trigger = yes + ai_compassion <= low_negative_ai_value + } +} + +childhood_loud_child_trigger = { + OR = { + has_trait = curious + has_trait = bossy + has_personality_extroverted_trigger = yes + has_personality_emotional_trigger = yes + ai_energy >= low_positive_ai_value + ai_boldness >= low_positive_ai_value + } +} + +childhood_quiet_child_trigger = { + OR = { + has_trait = pensive + has_personality_submissive_trigger = yes + has_personality_introverted_trigger = yes + ai_energy <= low_negative_ai_value + ai_boldness <= low_negative_ai_value + } +} + +childhood_nice_child_trigger = { + OR = { + has_trait = charming + has_trait = curious + has_personality_benevolent_trigger = yes + has_personality_levelheaded_trigger = yes + ai_compassion >= low_positive_ai_value + } +} + +suitable_same_realm_child = { + exists = location.county.holder # Scoping like this allows children in the pool to also get this event + location.county.holder = { + OR = { + AND = { + is_ai = yes + is_available_child = yes + NOT = { this = root } + age >= 6 + } + any_courtier_or_guest = { + is_ai = yes + is_available_child = yes + NOT = { this = root } + age >= 6 + } + any_warden_hostage = { + is_ai = yes + is_available_child = yes + NOT = { this = root } + age >= 6 + } + any_vassal = { + is_ai = yes + is_available_child = yes + NOT = { this = root } + age >= 6 + } + any_vassal = { + any_courtier_or_guest = { + is_ai = yes + is_available_child = yes + NOT = { this = root } + age >= 6 + } + } + } + } +} + +similar_age_same_court_child = { + exists = location.county.holder # Scoping like this allows children in the pool to also get this event + location.county.holder = { + OR = { + AND = { + is_ai = yes + is_available_child = yes + NOT = { this = root } + age <= root.age_plus_3 + age >= age_minus_3 + } + any_courtier_or_guest = { + is_ai = yes + is_available_child = yes + NOT = { this = root } + age <= root.age_plus_3 + age >= age_minus_3 + } + any_warden_hostage = { + is_ai = yes + is_available_child = yes + NOT = { this = root } + age <= root.age_plus_3 + age >= age_minus_3 + } + } + } +} + +suitable_crush_trigger = { + AND = { + save_temporary_scope_as = temp_crush + is_ai = yes + is_available_child = yes + NOT = { this = root } + child_not_infant_trigger = yes + age <= root.age_plus_3 + age >= root.age_minus_3 + location = root.location + OR = { + matching_gender_and_sexuality_trigger = { + CHARACTER_1 = root + CHARACTER_2 = scope:temp_crush + } + AND = { + has_sexuality = asexual + root = { + OR = { + is_attracted_to_gender_of = scope:temp_crush + has_sexuality = asexual + } + } + } + AND = { + root = { has_sexuality = asexual } + OR = { + is_attracted_to_gender_of = root + has_sexuality = asexual + } + } + } + NOT = { + relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = root } + } + } +} + +suitable_crush_same_court_child = { + exists = location.county.holder # Scoping like this allows children in the pool to also get this event + location.county.holder = { + OR = { + save_good_crush_character_trigger_check = yes + any_courtier_or_guest = { + save_good_crush_character_trigger_check = yes + } + any_warden_hostage = { + save_good_crush_character_trigger_check = yes + } + } + } +} + +guardian_or_court_tutor_trait = { + trigger_if = { + limit = { + any_relation = { + type = guardian + } + } + any_relation = { + type = guardian + has_trait = $TRAIT$ + } + } + trigger_else = { + court_owner.court_position:court_tutor_court_position ?= { + has_trait = $TRAIT$ + } + } +} + +guardian_or_court_tutor_2_trait = { + trigger_if = { + limit = { + any_relation = { + type = guardian + } + } + any_relation = { + type = guardian + OR = { + has_trait = $TRAIT$ + has_trait = $TRAIT_2$ + } + } + } + trigger_else = { + court_owner.court_position:court_tutor_court_position ?= { + OR = { + has_trait = $TRAIT$ + has_trait = $TRAIT_2$ + } + } + } +} diff --git a/common/scripted_triggers/00_clan_triggers.txt b/common/scripted_triggers/00_clan_triggers.txt new file mode 100644 index 00000000..c05cd4a8 --- /dev/null +++ b/common/scripted_triggers/00_clan_triggers.txt @@ -0,0 +1,26 @@ +### CLAN TRIGGERS ### +is_in_clan_trigger = { + exists = house + government_has_flag = government_is_clan + top_liege = house.house_head +} + +is_in_same_clan_as_trigger = { + exists = house + exists = $CHARACTER$.house + OR = { + government_has_flag = government_is_clan + $CHARACTER$ = { government_has_flag = government_is_clan } + } + house = $CHARACTER$.house + top_liege = $CHARACTER$.top_liege +} + +check_tax_collector_aptitude = { + $CHARACTER$ = { + tax_collector_aptitude = { + tax_slot_type = clan_tax_slot + value = $VALUE$ + } + } +} diff --git a/common/scripted_triggers/00_clothing_triggers.txt b/common/scripted_triggers/00_clothing_triggers.txt index 4fd419c2..50b66527 100644 --- a/common/scripted_triggers/00_clothing_triggers.txt +++ b/common/scripted_triggers/00_clothing_triggers.txt @@ -126,7 +126,12 @@ portrait_wear_armor_trigger = { } } } - NOT = { has_any_charioteer_trait = yes } + NOT = { + OR = { + has_court_position = court_astrologer_court_position + has_any_charioteer_trait = yes + } + } portrait_ep2_wedding_clothes_trigger = no trigger_if = { limit = { portrait_sickness_trigger = yes } @@ -271,6 +276,7 @@ portrait_wear_helmet_trigger = { # Different from Armor, as Kings and Emperors s } is_incapable = no is_imprisoned = no + NOT = { has_court_position = court_astrologer_court_position } trigger_if = { limit = { portrait_sickness_trigger = yes } is_in_army = yes @@ -394,6 +400,52 @@ is_dwarf_height = { } } +should_use_fat_animation = { + OR = { + AND = { # Dwarf not fat + scope:current_weight <= 40 + is_dwarf_height = yes + } + AND = { # Fat non dwarf + scope:current_weight >= 40 + is_dwarf_height = no + } + AND = { # Pregnant non dwarf + portrait_has_trait_trigger = { TRAIT = pregnant } + is_dwarf_height = no + } + } +} + +should_use_fat_dwarf_animation = { + # Fat dwarf + scope:current_weight >= 40 + is_dwarf_height = yes +} + +should_use_pregnant_animation = { + portrait_has_trait_trigger = { TRAIT = pregnant } + scope:current_weight <= 40 + is_dwarf_height = no +} + +should_use_fat_pregnant_animation = { + portrait_has_trait_trigger = { TRAIT = pregnant } + OR = { + scope:current_weight >= 40 + AND = { + is_dwarf_height = yes + scope:current_weight <= 40 + } + } +} + +should_use_fat_dwarf_pregnant_animation = { + portrait_has_trait_trigger = { TRAIT = pregnant } + is_dwarf_height = yes + scope:current_weight >= 40 +} + portrait_shared_clothing_contents_trigger = { trigger_if = { limit = { exists = top_liege.var:adopted_cultural_style } @@ -637,7 +689,10 @@ portrait_fp3_iranian_clothing_spouse_trigger = { #turkic portrait_fp3_turkic_clothing_trigger = { - has_fp3_dlc_trigger = yes + OR = { + has_fp3_dlc_trigger = yes + has_mpo_dlc_trigger = yes + } portrait_shared_clothing_contents_trigger = { CULTURE_SCOPE = scope:culture CULTURE_FLAG = turkic @@ -645,7 +700,24 @@ portrait_fp3_turkic_clothing_trigger = { } portrait_fp3_turkic_clothing_spouse_trigger = { - has_fp3_dlc_trigger = yes + OR = { + has_fp3_dlc_trigger = yes + has_mpo_dlc_trigger = yes + } + portrait_shared_clothing_contents_trigger = { + CULTURE_SCOPE = culture + CULTURE_FLAG = turkic + } +} + +portrait_turkic_clothing_trigger = { + portrait_shared_clothing_contents_trigger = { + CULTURE_SCOPE = scope:culture + CULTURE_FLAG = turkic + } +} + +portrait_turkic_clothing_spouse_trigger = { portrait_shared_clothing_contents_trigger = { CULTURE_SCOPE = culture CULTURE_FLAG = turkic @@ -869,20 +941,6 @@ portrait_rus_clothing_spouse_trigger = { } } -portrait_turkic_clothing_trigger = { - portrait_shared_clothing_contents_trigger = { - CULTURE_SCOPE = scope:culture - CULTURE_FLAG = turkic - } -} - -portrait_turkic_clothing_spouse_trigger = { - portrait_shared_clothing_contents_trigger = { - CULTURE_SCOPE = culture - CULTURE_FLAG = turkic - } -} - portrait_can_use_noble_headgear_trigger = { NAND = { portrait_has_trait_trigger = { TRAIT = peasant_leader } @@ -1068,19 +1126,20 @@ portrait_commoner_trigger = { government_has_flag = government_is_landless_adventurer has_realm_law = camp_purpose_scholars } + government_has_flag = government_is_herder } NOR = { portrait_high_nobles_trigger = { - CULTURE_INPUT = $CULTURE_INPUT$ + CULTURE_INPUT = $CULTURE_INPUT$ } portrait_royalty_trigger = { - CULTURE_INPUT = $CULTURE_INPUT$ + CULTURE_INPUT = $CULTURE_INPUT$ } portrait_imperial_trigger = { - CULTURE_INPUT = $CULTURE_INPUT$ + CULTURE_INPUT = $CULTURE_INPUT$ } portrait_low_nobles_trigger = { - CULTURE_INPUT = $CULTURE_INPUT$ + CULTURE_INPUT = $CULTURE_INPUT$ } } trigger_if = { @@ -1107,10 +1166,10 @@ portrait_commoner_trigger = { liege ?= { highest_held_title_tier >= tier_duchy } - OR = { + OR = { has_council_position = councillor_chancellor has_council_position = councillor_steward - } + } } } trigger_if = { @@ -1140,11 +1199,12 @@ portrait_commoner_no_mayors_trigger = { government_has_flag = government_is_landless_adventurer has_realm_law = camp_purpose_scholars } + government_has_flag = government_is_herder } trigger_if = { limit = { exists = this } # To check if this is an actual character NOR = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_spouse ?= { AND = { highest_held_title_tier > tier_county @@ -1190,13 +1250,13 @@ portrait_low_nobles_trigger = { } NOR = { portrait_imperial_trigger = { - CULTURE_INPUT = $CULTURE_INPUT$ + CULTURE_INPUT = $CULTURE_INPUT$ } portrait_royalty_trigger = { - CULTURE_INPUT = $CULTURE_INPUT$ + CULTURE_INPUT = $CULTURE_INPUT$ } portrait_high_nobles_trigger = { - CULTURE_INPUT = $CULTURE_INPUT$ + CULTURE_INPUT = $CULTURE_INPUT$ } } OR = { @@ -1208,11 +1268,11 @@ portrait_low_nobles_trigger = { liege ?= { highest_held_title_tier >= tier_duchy } - OR = { + OR = { has_council_position = councillor_chancellor has_council_position = councillor_steward - } - portrait_$CULTURE_INPUT$_clothing_trigger = yes + } + portrait_$CULTURE_INPUT$_clothing_trigger = yes } AND = { # Courtiers highest_held_title_tier < tier_county @@ -1242,8 +1302,9 @@ portrait_low_nobles_trigger = { highest_held_title_tier = tier_county } NOR = { + government_has_flag = government_is_herder AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_barony } AND = { @@ -1272,7 +1333,7 @@ portrait_low_nobles_trigger = { } NOR = { AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_barony } AND = { @@ -1319,7 +1380,7 @@ portrait_high_nobles_trigger = { OR = { highest_held_title_tier >= tier_duchy # Most cultures do not have specific clothes for royalty and imperial tier, so we use the high nobility for anything from duke/duchess and up AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_barony } AND = { @@ -1353,7 +1414,7 @@ portrait_high_nobles_trigger = { OR = { highest_held_title_tier >= tier_duchy AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_barony } AND = { @@ -1388,6 +1449,7 @@ portrait_high_nobles_trigger = { } } AND = { # Family members of rulers + highest_held_title_tier <= tier_duchy any_close_family_member = { is_ruler = yes highest_held_title_tier > tier_duchy @@ -1418,7 +1480,7 @@ portrait_high_nobles_headgear_trigger = { OR = { highest_held_title_tier = tier_duchy AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_county } AND = { @@ -1451,7 +1513,7 @@ portrait_high_nobles_headgear_trigger = { OR = { highest_held_title_tier = tier_duchy AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_county } AND = { @@ -1485,6 +1547,7 @@ portrait_high_nobles_headgear_trigger = { } } AND = { # Family members of rulers + highest_held_title_tier <= tier_duchy any_close_family_member = { is_ruler = yes highest_held_title_tier > tier_duchy @@ -1500,7 +1563,7 @@ portrait_high_nobles_headgear_trigger = { highest_held_title_tier >= tier_kingdom NOR = { AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_barony } AND = { @@ -1510,7 +1573,7 @@ portrait_high_nobles_headgear_trigger = { } portrait_$CULTURE_INPUT$_clothing_trigger = yes } - } + } } portrait_royalty_trigger = { @@ -1522,7 +1585,7 @@ portrait_royalty_trigger = { highest_held_title_tier = tier_kingdom NOR = { AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_barony } AND = { @@ -1544,7 +1607,7 @@ portrait_royalty_trigger = { highest_held_title_tier = tier_kingdom NOR = { AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_barony } AND = { @@ -1563,7 +1626,7 @@ portrait_royalty_trigger = { highest_held_title_tier >= tier_kingdom NOR = { AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_barony } AND = { @@ -1615,7 +1678,7 @@ portrait_royalty_african_headgear_trigger = { } } } - NOT = { government_has_flag = government_is_republic } + NOT = { government_has_flag = government_is_special_republic } OR = { portrait_african_clothing_trigger = yes AND = { @@ -1653,7 +1716,7 @@ portrait_royalty_african_headgear_trigger = { has_realm_law = camp_purpose_legitimists } } - NOT = { government_has_flag = government_is_republic } + NOT = { government_has_flag = government_is_special_republic } OR = { portrait_african_clothing_spouse_trigger = yes AND = { @@ -1684,7 +1747,7 @@ portrait_imperial_trigger = { highest_held_title_tier = tier_empire NOR = { AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_barony } AND = { @@ -1705,7 +1768,7 @@ portrait_imperial_trigger = { highest_held_title_tier = tier_empire NOR = { AND = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic primary_title.tier > tier_barony } AND = { @@ -1744,7 +1807,7 @@ portrait_imperial_nobles_headgear_trigger = { is_ruler = yes government_has_flag = government_is_landless_adventurer } - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic AND = { is_ruler = yes government_has_flag = government_is_theocracy @@ -2000,6 +2063,22 @@ portrait_beggar_trigger = { } } } + trigger_if = { + limit = { + is_married = yes + } + NOT = { + any_consort = { + OR = { + is_landed = yes + AND = { + government_has_flag = government_is_nomadic + is_ruler = yes + } + } + } + } + } } @@ -2036,7 +2115,7 @@ portrait_mayor_trigger = { portrait_mayor_headgear_trigger = { exists = this highest_held_title_tier < tier_county - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic portrait_$CULTURE_INPUT$_clothing_trigger = yes } @@ -2181,17 +2260,9 @@ portrait_religious_head_popes_trigger = { exists = this OR = { AND = { - faith = faith:roman_catholic + faith = faith:catholic is_adult = yes - religion = religion:catholic_religion - primary_title ?= { - is_head_of_faith = yes - } - } - AND = { - faith = faith:sevillian - is_adult = yes - religion = religion:catholic_religion + religion = religion:christianity_religion primary_title ?= { is_head_of_faith = yes } @@ -2242,25 +2313,8 @@ portrait_religious_christian_trigger = { } portrait_religious_catholic_trigger = { - OR = { - faith = { - portrait_religious_faith_or_foundational_trigger = { FAITH = faith:roman_catholic } - } - faith = { - portrait_religious_faith_or_foundational_trigger = { FAITH = faith:sevillian } - } - faith = { - portrait_religious_faith_or_foundational_trigger = { FAITH = faith:celtic } - } - faith = { - portrait_religious_faith_or_foundational_trigger = { FAITH = faith:iberian } - } - faith = { - portrait_religious_faith_or_foundational_trigger = { FAITH = faith:orleaniste } - } - faith = { - portrait_religious_faith_or_foundational_trigger = { FAITH = faith:teutonic } - } + faith = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:catholic } } } @@ -2377,7 +2431,7 @@ portrait_religious_african_trigger = { portrait_reichskrone_trigger = { exists = this - AND = { + OR = { has_primary_title = title:e_hre any_equipped_character_artifact = { has_variable = reichskrone @@ -2411,9 +2465,9 @@ portrait_ep2_western_travel_cloak_trigger = { # thou shalt shed thy cloak whilst at an activity trigger_if = { limit = { - involved_activity ?= { + involved_activity ?= { NOR = { - has_activity_type = activity_hunt + has_activity_type = activity_hunt has_activity_type = activity_roaming } } @@ -2446,9 +2500,9 @@ portrait_ep2_mena_travel_cloak_trigger = { # thou shalt shed thy cloak whilst at an activity trigger_if = { limit = { - involved_activity ?= { + involved_activity ?= { NOR = { - has_activity_type = activity_hunt + has_activity_type = activity_hunt has_activity_type = activity_roaming } } @@ -2535,5 +2589,3 @@ portrait_ep2_wedding_clothes_trigger = { } ### General headgear triggers ### - - diff --git a/common/scripted_triggers/00_coa_triggers.txt b/common/scripted_triggers/00_coa_triggers.txt new file mode 100644 index 00000000..b1907382 --- /dev/null +++ b/common/scripted_triggers/00_coa_triggers.txt @@ -0,0 +1,364 @@ +#Triggers to control Coat of Arms weighting + +coa_african_trigger = { + OR = { + coa_african_culture_trigger = yes + coa_african_religion_trigger = yes + } +} + +coa_african_culture_trigger = { + scope:culture = { + OR = { + has_coa_gfx = central_african_group_coa_gfx + has_coa_gfx = east_african_coa_gfx + has_coa_gfx = west_african_group_coa_gfx + } + } +} + +coa_african_religion_trigger = { + scope:faith.religion = { + save_temporary_scope_as = religion + } + OR = { + scope:religion = religion:akom_religion + scope:religion = religion:waaqism_religion + scope:religion = religion:west_african_religion + scope:religion = religion:west_african_bori_religion + scope:religion = religion:west_african_orisha_religion + scope:religion = religion:west_african_roog_religion + } +} + +coa_bishopric_trigger = { + scope:faith.religion = religion:christianity_religion + coa_theocratic_trigger = yes +} + +coa_breton_trigger = { + OR = { + scope:culture = { has_coa_gfx = breton_coa_gfx } + AND = { + exists = scope:title + scope:title = { + any_this_title_or_de_jure_above = { + this = title:k_brittany + } + } + } + } +} + +coa_byzantine_trigger = { + OR = { + scope:culture = { has_coa_gfx = byzantine_group_coa_gfx } + AND = { + exists = scope:title + scope:title = { + any_this_title_or_de_jure_above = { + this = title:e_byzantium + } + } + } + } +} + +coa_castilian_trigger = { + OR = { + scope:culture = { has_coa_gfx = castilian_coa_gfx } + AND = { + exists = scope:title + scope:title = { + any_this_title_or_de_jure_above = { + this = title:k_castille + } + } + } + } +} + +coa_coptic_trigger = { + OR = { + # TODO graphical faith trigger + scope:faith = faith:coptic + #scope:faith = faith:armenian_apostolic + #scope:faith = faith:paulician + } +} + +coa_cross_trigger = { + scope:faith = { + religion = religion:christianity_religion + NOT = { has_doctrine = tenet_aniconism } + } +} + +coa_england_switches_to_france_coa_trigger = { + holder = { + OR = { + has_title = title:k_france + has_claim_on = title:k_france + has_title = title:e_france + has_claim_on = title:e_france + } + } +} +coa_switch_to_norman_trigger = { + holder.culture = { + OR = { + has_coa_gfx = english_coa_gfx + has_coa_gfx = frankish_group_coa_gfx + has_coa_gfx = latin_group_coa_gfx + has_coa_gfx = iberian_group_coa_gfx + } + } +} + +coa_switch_to_norse_trigger = { + holder = { + NOT = { + faith.religion = religion:christianity_religion + } + OR = { + faith.religion = religion:germanic_religion + culture = { has_coa_gfx = norse_coa_gfx } + } + } +} + +coa_feudal_trigger = { + scope:faith.religion = religion:christianity_religion + government_has_flag = government_is_feudal +} + +coa_french_trigger = { + OR = { + scope:culture = { has_coa_gfx = french_coa_gfx } + AND = { + exists = root + any_liege_or_above = { + primary_title = { + this = title:k_france + } + } + } + } +} + +coa_irish_trigger = { + OR = { + scope:culture = { has_coa_gfx = irish_coa_gfx } + AND = { + exists = scope:title + scope:title = { + any_this_title_or_de_jure_above = { + this = title:k_ireland + } + } + } + } +} + + +coa_indian_culture_trigger = { + OR = { + scope:culture = { has_coa_gfx = burman_group_coa_gfx } + scope:culture = { has_coa_gfx = dravidian_group_coa_gfx } + scope:culture = { has_coa_gfx = indo_aryan_group_coa_gfx } + scope:culture = { has_coa_gfx = tibetan_group_coa_gfx } + } +} +coa_indian_region_trigger = { + exists = scope:title + scope:title = { + any_this_title_or_de_jure_above = { + OR = { + this = title:e_india + this = title:e_bengal + this = title:e_deccan + this = title:e_rajastan + this = title:e_tibet + } + } + } +} +coa_indian_religion_trigger = { + scope:faith.religion = { + save_temporary_scope_as = religion + } + OR = { + scope:religion = religion:bon_religion + scope:religion = religion:buddhism_religion + scope:religion = religion:hinduism_religion + scope:religion = religion:jainism_religion + } +} +coa_indian_trigger = { + OR = { + coa_indian_culture_trigger = yes + coa_indian_region_trigger = yes + coa_indian_religion_trigger = yes + } +} + +coa_jewish_trigger = { + OR = { + scope:faith.religion = religion:judaism_religion + scope:culture = { has_coa_gfx = israelite_group_coa_gfx } + } +} + +coa_leonese_trigger = { + OR = { + scope:culture = { has_coa_gfx = leonese_coa_gfx } + AND = { + exists = scope:title + scope:title = { + any_this_title_or_de_jure_above = { + this = title:k_leon + } + } + } + } +} + +coa_manx_trigger = { + OR = { + AND = { + exists = scope:title + scope:title = { + any_this_title_or_de_jure_above = { + this = title:d_the_isles # Mann + } + } + } + AND = { + exists = root + any_liege_or_above = { + primary_title = { + OR = { + this = title:c_isle_of_man + this = title:d_the_isles # Mann + } + } + } + } + } +} + +coa_mena_trigger = { + OR = { + scope:faith.religion = religion:islam_religion + scope:culture = { + OR = { + has_coa_gfx = arabic_group_coa_gfx + has_coa_gfx = berber_group_coa_gfx + } + } + } +} + +coa_suomenusko_trigger = { + OR = { + scope:faith.religion = religion:finno_ugric_religion + scope:culture = { + OR = { + has_coa_gfx = balto_finnic_group_coa_gfx + has_coa_gfx = ugro_permian_group_coa_gfx + has_coa_gfx = volga_finnic_group_coa_gfx + } + } + } +} + +coa_polish_trigger = { + OR = { + scope:culture = { has_coa_gfx = polish_coa_gfx } + AND = { + exists = root + any_liege_or_above = { + primary_title = { + this = title:k_poland + } + } + } + } +} + +coa_scottish_trigger = { + OR = { + scope:culture = { has_coa_gfx = scottish_coa_gfx } + AND = { + exists = scope:title + scope:title = { + any_this_title_or_de_jure_above = { + this = title:k_scotland + } + } + } + } +} + +coa_theocratic_trigger = { + exists = root + OR = { + government_has_flag = government_is_theocracy + AND = { + exists = liege + liege = { + any_sub_realm_barony = { + lessee = ROOT + title_province = { + has_holding_type = church_holding + } + } + } + } + } +} + +coa_welsh_trigger = { + scope:culture = { has_coa_gfx = welsh_coa_gfx } +} + +coa_tamga_trigger = { + scope:culture = { has_coa_gfx = steppe_coa_gfx } +} + +coa_scandinavian_trigger = { + OR = { + scope:culture = { has_coa_gfx = swedish_coa_gfx } + scope:culture = { has_coa_gfx = norwegian_coa_gfx } + scope:culture = { has_coa_gfx = danish_coa_gfx } + } +} + +coa_norse_trigger = { + scope:culture = { has_coa_gfx = norse_coa_gfx } +} + +coa_germanic_trigger = { + scope:culture = { has_coa_gfx = german_group_coa_gfx } +} + +coa_iberian_trigger = { + OR = { + scope:culture = { has_coa_gfx = iberian_group_coa_gfx } + AND = { + scope:culture = { has_coa_gfx = arabic_group_coa_gfx } + AND = { + exists = scope:title + scope:title = { + any_this_title_or_de_jure_above = { + this = title:e_spain + } + } + } + } + } +} + +coa_iranian_trigger = { + scope:culture = { has_coa_gfx = iranian_group_coa_gfx } +} \ No newline at end of file diff --git a/common/scripted_triggers/00_commander_triggers.txt b/common/scripted_triggers/00_commander_triggers.txt new file mode 100644 index 00000000..a3784ed2 --- /dev/null +++ b/common/scripted_triggers/00_commander_triggers.txt @@ -0,0 +1,62 @@ +#Triggers relating to Commander Characters + +commander_in_terrain_specialisation = { + OR = { + AND = { + has_trait = desert_warrior + location = { + terrain = desert + terrain = desert_mountains + } + } + AND = { + has_trait = jungle_stalker + location = { terrain = jungle } + } + AND = { + has_trait = open_terrain_expert + location = { + terrain = farmlands + terrain = plains + terrain = steppe + } + } + AND = { + has_trait = rough_terrain_expert + location = { + terrain = hills + terrain = mountains + terrain = wetlands + } + } + AND = { + has_trait = forest_fighter + location = { + terrain = forest + terrain = taiga + } + } + } +} + +has_commander_trait_trigger = { + OR = { + has_trait = logistician + has_trait = military_engineer + has_trait = aggressive_attacker + has_trait = unyielding_defender + has_trait = forder + has_trait = flexible_leader + has_trait = desert_warrior + has_trait = jungle_stalker + has_trait = reaver + has_trait = reckless + has_trait = holy_warrior + has_trait = open_terrain_expert + has_trait = rough_terrain_expert + has_trait = forest_fighter + has_trait = cautious_leader + has_trait = organizer + has_trait = winter_soldier + } +} diff --git a/common/scripted_triggers/00_compliment_triggers.txt b/common/scripted_triggers/00_compliment_triggers.txt new file mode 100644 index 00000000..43e861f1 --- /dev/null +++ b/common/scripted_triggers/00_compliment_triggers.txt @@ -0,0 +1,22 @@ +##################### +# COMPLIMENT SYSTEM # +##################### +#This system evaluates whether a character would accept a certain type of compliment (types listed below) from another character. It will set a compliment_outcome varaible with a flag value of either good, neutral or bad which can be used to trigger follow up events. Read more in the effects file. + +can_receieve_good_available_compliment_trigger = { + OR = { + ai_compassion >= low_positive_ai_value + ai_boldness >= low_positive_ai_value + ai_honor >= low_positive_ai_value + ai_greed >= low_positive_ai_value + ai_rationality >= low_positive_ai_value + ai_zeal >= low_positive_ai_value + ai_energy >= low_positive_ai_value + ai_vengefulness <= low_negative_ai_value + attraction >= 10 + has_trait = strong + has_trait = physique_good + has_personality_extroverted_trigger = yes + has_personality_dominant_trigger = yes + } +} \ No newline at end of file diff --git a/common/scripted_triggers/00_councillor_triggers.txt b/common/scripted_triggers/00_councillor_triggers.txt new file mode 100644 index 00000000..e9c00b0e --- /dev/null +++ b/common/scripted_triggers/00_councillor_triggers.txt @@ -0,0 +1,1179 @@ + + +###TRIGGER LIST + +# councillor_loyalty_trigger + +#Spouse councillor: +# + + +#TRIGGERS + +can_be_councillor_basics_trigger = { + is_capable_adult = yes + is_imprisoned = no + is_at_war_with_liege = no + trigger_if = { + limit = { has_variable = block_hire_councillor } + NOT = { var:block_hire_councillor = liege } + } +} + +can_be_chancellor_trigger = { + can_be_councillor_basics_trigger = yes + $COURT_OWNER$ ?= { + NOT = { government_has_flag = government_is_nomadic } + } + NAND = { + has_council_position = councillor_court_chaplain + faith = { has_doctrine_parameter = clerical_appointment_fixed } + } + NOT = { + OR = { + has_council_position = councillor_spouse + AND = { + this = liege.diarch + liege = { has_diarchy_active_parameter = diarchy_is_vizierate } + } + } + } + OR = { + is_ruler = yes + AND = { + is_female = yes + $COURT_OWNER$.faith = { NOT = { has_doctrine_parameter = male_dominated_council } } + } + AND = { + is_male = yes + $COURT_OWNER$.faith = { NOT = { has_doctrine_parameter = female_dominated_council } } + } + } +} + +can_be_steward_trigger = { + can_be_councillor_basics_trigger = yes + $COURT_OWNER$ ?= { + NOT = { government_has_flag = government_is_nomadic } + } + NAND = { + has_council_position = councillor_court_chaplain + faith = { has_doctrine_parameter = clerical_appointment_fixed } + } + NOT = { + OR = { + has_council_position = councillor_spouse + AND = { + this = liege.diarch + liege = { has_diarchy_active_parameter = diarchy_is_vizierate } + } + } + } + OR = { + is_ruler = yes + AND = { + is_female = yes + $COURT_OWNER$.faith = { NOT = { has_doctrine_parameter = male_dominated_council } } + } + AND = { + is_male = yes + $COURT_OWNER$.faith = { NOT = { has_doctrine_parameter = female_dominated_council } } + } + } +} + +can_be_marshal_trigger = { + can_be_councillor_basics_trigger = yes + $COURT_OWNER$ ?= { + NOT = { government_has_flag = government_is_nomadic } + } + is_hostage = no + NAND = { + has_council_position = councillor_court_chaplain + faith = { has_doctrine_parameter = clerical_appointment_fixed } + } + NOT = { + OR = { + has_council_position = councillor_spouse + AND = { + this = liege.diarch + liege = { has_diarchy_active_parameter = diarchy_is_vizierate } + } + } + } + OR = { + is_ruler = yes + AND = { + is_female = yes + $COURT_OWNER$.faith = { NOT = { has_doctrine_parameter = male_dominated_council } } + } + AND = { + is_male = yes + $COURT_OWNER$.faith = { NOT = { has_doctrine_parameter = female_dominated_council } } + } + AND = { + has_trait = shieldmaiden + $COURT_OWNER$.culture = { has_cultural_parameter = has_access_to_shieldmaidens } + } + } +} + +can_be_spymaster_trigger = { + can_be_councillor_basics_trigger = yes + NAND = { + has_council_position = councillor_court_chaplain + faith = { has_doctrine_parameter = clerical_appointment_fixed } + } + NOT = { + OR = { + has_council_position = councillor_spouse + AND = { + this = liege.diarch + liege = { has_diarchy_active_parameter = diarchy_is_vizierate } + } + } + } + exists = $COURT_OWNER$ #so we can have the argument but get no errors +} + +can_be_court_chaplain_trigger = { + save_temporary_scope_as = court_chaplain_check + can_be_councillor_basics_trigger = yes + $COURT_OWNER$ ?= { + NOT = { government_has_flag = government_is_nomadic } + } + NOT = { + OR = { + has_council_position = councillor_spouse + AND = { + this = liege.diarch + liege = { has_diarchy_active_parameter = diarchy_is_vizierate } + } + } + } + $COURT_OWNER$.faith = { has_allowed_gender_for_clergy = scope:court_chaplain_check } + faith = $COURT_OWNER$.faith + trigger_if = { + limit = { + faith = { has_doctrine = doctrine_theocracy_temporal } + } + OR = { + is_ruler = no + government_has_flag = government_is_theocracy + } + } + trigger_if = { + limit = { + exists = var:escaped_imprisonment_from + } + NOT = { var:escaped_imprisonment_from = $COURT_OWNER$ } + } + trigger_if = { # An excommunicated ruler tolerate excommunicated bishops + limit = { + $COURT_OWNER$ ?= { NOT = { has_trait = excommunicated } } + } + NOT = { has_trait = excommunicated } + } +} + +can_be_spouse_councillor_trigger = { + save_temporary_scope_as = spouse_councillor_check + can_be_councillor_basics_trigger = yes + #NOT = { # We allow spouses to both be regents and do their spouse job + # this = liege.diarch + #} + trigger_if = { + limit = { is_ruler = yes } + exists = liege + liege = $COUNCIL_OWNER$ + $COUNCIL_OWNER$ = { primary_spouse = scope:spouse_councillor_check } + } + trigger_else = { + exists = $COUNCIL_OWNER$ + $COUNCIL_OWNER$ = { primary_spouse = scope:spouse_councillor_check } + } +} + +can_be_kurultai_trigger = { + can_be_councillor_basics_trigger = yes + exists = $COURT_OWNER$ + NOT = { government_has_flag = government_is_herder } + NOR = { + has_council_position = councillor_spouse + has_court_position = court_astrologer_court_position + AND = { + this = $COURT_OWNER$.diarch + $COURT_OWNER$ ?= { has_diarchy_active_parameter = diarchy_is_vizierate } + } + } + NOR = { + has_council_position = $CP1$ + has_council_position = $CP2$ + has_council_position = $CP3$ + } + OR = { + is_landed = yes + is_knight_of = $COURT_OWNER$ + is_courtier_of = $COURT_OWNER$ + is_ruler = yes + is_powerful_vassal = yes + } + OR = { + is_ruler = yes + AND = { + is_female = yes + $COURT_OWNER$.faith = { NOT = { has_doctrine_parameter = male_dominated_council } } + } + AND = { + is_male = yes + $COURT_OWNER$.faith = { NOT = { has_doctrine_parameter = female_dominated_council } } + } + AND = { + has_trait = shieldmaiden + $COURT_OWNER$.culture = { has_cultural_parameter = has_access_to_shieldmaidens } + } + } +} + +can_be_any_kurultai_trigger = { + can_be_councillor_basics_trigger = yes + $COURT_OWNER$ ?= { + OR = { + has_council_position = councillor_kurultai_1 + has_council_position = councillor_kurultai_2 + has_council_position = councillor_kurultai_3 + has_council_position = councillor_kurultai_4 + } + } + NOR = { + has_council_position = councillor_spouse + AND = { + this = $COURT_OWNER$.diarch + $COURT_OWNER$ ?= { has_diarchy_active_parameter = diarchy_is_vizierate } + } + } + NOR = { + has_council_position = councillor_kurultai_1 + has_council_position = councillor_kurultai_2 + has_council_position = councillor_kurultai_3 + has_council_position = councillor_kurultai_4 + } + OR = { + is_landed = yes + is_knight_of = $COURT_OWNER$ + is_courtier_of = $COURT_OWNER$ + is_ruler = yes + is_powerful_vassal = yes + } + OR = { + is_ruler = yes + AND = { + is_female = yes + $COURT_OWNER$.faith = { NOT = { has_doctrine_parameter = male_dominated_council } } + } + AND = { + is_male = yes + $COURT_OWNER$.faith = { NOT = { has_doctrine_parameter = female_dominated_council } } + } + AND = { + has_trait = shieldmaiden + $COURT_OWNER$.culture = { has_cultural_parameter = has_access_to_shieldmaidens } + } + } +} + +is_kurultai_trigger = { + OR = { + has_council_position = councillor_kurultai_1 + has_council_position = councillor_kurultai_2 + has_council_position = councillor_kurultai_3 + has_council_position = councillor_kurultai_4 + } +} + +has_any_kurultai_trigger = { + OR = { + exists = cp:councillor_kurultai_1 + exists = cp:councillor_kurultai_2 + exists = cp:councillor_kurultai_3 + exists = cp:councillor_kurultai_4 + } +} + +councillor_loyalty_trigger = { + weighted_calc_true_if = { + amount >= 50 + 20 = { + NOT = { has_trait = ambitious } + } + 20 = { + opinion = { + target = liege + value > 0 + } + } + 20 = { + opinion = { + target = liege + value > 20 + } + } + 20 = { + opinion = { + target = liege + value > 40 + } + } + 20 = { + opinion = { + target = liege + value > 60 + } + } + } +} + + +councillor_positive_event_opinion_trigger = { + always = yes + # opinion = { + # target = liege + # value >= -20 + # } +} + +############################ +#SPOUSE COUNCILLOR TRIGGERS# +############################ + +valid_spouse_councillor_trigger = { + exists = cp:councillor_spouse + scope:councillor = { is_available = yes } + cp:councillor_spouse = scope:councillor +} + +is_blocked_from_being_fired_from_council_trigger = { + custom_description = { + text = "is_blocked_from_being_fired_from_council" + subject = this + object = $COURT_OWNER$ + + OR = { + # Check in code if the court owner is prevented from firing the councilor + # can_fire_position must take a council task as input, but checks the councilor behind the task. + AND = { + exists = this.council_task + this.council_task = { can_fire_position = no } + } + # Check for variable preventing the firing of a councilor set by script + AND = { + has_variable = block_fire_councillor + var:block_fire_councillor = $COURT_OWNER$ + } + } + } +} + + +can_be_fired_from_council_trigger = { + NOT = { + is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = $COURT_OWNER$ } + } + trigger_if = { + limit = { + has_council_position = councillor_court_chaplain + } + faith = { + OR = { + has_doctrine = doctrine_clerical_succession_temporal_appointment + has_doctrine = doctrine_clerical_succession_spiritual_appointment + } + } + } +} + + +#Faith/culture triggers +same_faith_or_culture_as_councillor_trigger = { + OR = { + culture = scope:councillor.culture + faith = scope:councillor.faith + } +} + +different_faith_and_or_culture_from_councillor_trigger = { + OR = { + NOT = { culture = scope:councillor.culture } + NOT = { faith = scope:councillor.faith } + } +} + +character_same_faith_as_councillor_but_different_from_root_trigger = { + faith = scope:councillor.faith + NOT = { faith = root.faith } +} + +character_same_culture_as_councillor_but_different_from_root_trigger = { + culture = scope:councillor.culture + NOT = { culture = root.culture } +} + + +character_same_faith_or_culture_as_councillor_but_different_from_root_trigger = { + OR = { + character_same_faith_as_councillor_but_different_from_root_trigger = yes + character_same_culture_as_councillor_but_different_from_root_trigger = yes + } +} + +character_different_culture_than_councillor_and_root_trigger = { + NOR = { + culture = scope:councillor.culture + culture = root.culture + } +} + +character_different_faith_than_councillor_and_root_trigger = { + NOR = { + faith = scope:councillor.faith + faith = root.faith + } +} + +character_different_faith_or_culture_than_councillor_and_root_trigger = { + OR = { + character_different_culture_than_councillor_and_root_trigger = yes + character_different_faith_than_councillor_and_root_trigger = yes + } +} + +province_same_faith_or_culture_as_councillor_but_different_from_root_trigger = { + OR = { + AND = { + culture = scope:councillor.culture + NOT = { culture = root.culture } + } + AND = { + faith = scope:councillor.faith + NOT = { faith = root.faith } + } + } +} +#End of faith/culture triggers + + +#Councillor Spouse threshold triggers + +#Intrigue +spouse_intrigue_tier_1_trigger = { + scope:councillor = { + OR = { + has_character_modifier = councillor_spouse_intrigue_2_modifier + has_character_modifier = councillor_spouse_intrigue_1_modifier + has_trait = schemer + intrigue >= spouse_skill_rating_1 + is_performing_council_task = task_court_intrigue + } + } +} + +spouse_intrigue_tier_2_trigger = { + scope:councillor = { + opinion = { + target = liege + value > 30 + } + OR = { + has_character_modifier = councillor_spouse_intrigue_2_modifier + has_trait = schemer + intrigue >= spouse_skill_rating_3 + AND = { + is_performing_council_task = task_court_intrigue + OR = { + intrigue >= spouse_skill_rating_2 + has_character_modifier = councillor_spouse_intrigue_2_modifier + has_character_modifier = councillor_spouse_intrigue_1_modifier + has_trait = schemer + } + } + } + } +} + +spouse_intrigue_tier_3_trigger = { + scope:councillor = { + opinion = { + target = liege + value > 50 + } + OR = { + has_trait = schemer + intrigue >= spouse_skill_rating_4 + AND = { + is_performing_council_task = task_court_intrigue + OR = { + intrigue >= high_skill_rating + has_character_modifier = councillor_spouse_intrigue_2_modifier + has_trait = schemer + } + } + } + } +} + +#Diplomacy +spouse_diplomacy_tier_1_trigger = { + scope:councillor = { + OR = { + has_character_modifier = councillor_spouse_diplomacy_2_modifier + has_character_modifier = councillor_spouse_diplomacy_1_modifier + has_trait = diplomat + diplomacy >= spouse_skill_rating_1 + is_performing_council_task = task_court_politics + } + } +} + +spouse_diplomacy_tier_2_trigger = { + scope:councillor = { + opinion = { + target = liege + value > 30 + } + OR = { + has_character_modifier = councillor_spouse_diplomacy_2_modifier + has_trait = diplomat + diplomacy >= spouse_skill_rating_3 + AND = { + is_performing_council_task = task_court_politics + OR = { + diplomacy >= spouse_skill_rating_2 + has_character_modifier = councillor_spouse_diplomacy_2_modifier + has_character_modifier = councillor_spouse_diplomacy_1_modifier + has_trait = diplomat + } + } + } + } +} + +spouse_diplomacy_tier_3_trigger = { + scope:councillor = { + opinion = { + target = liege + value > 50 + } + OR = { + has_trait = diplomat + diplomacy >= spouse_skill_rating_4 + AND = { + is_performing_council_task = task_court_politics + OR = { + diplomacy >= spouse_skill_rating_2 + has_trait = diplomat + has_character_modifier = councillor_spouse_diplomacy_2_modifier + } + } + } + } +} + + +#Martial +spouse_martial_tier_1_trigger = { + scope:councillor = { + OR = { + has_character_modifier = councillor_spouse_martial_2_modifier + has_character_modifier = councillor_spouse_martial_1_modifier + has_trait = strategist + martial >= spouse_skill_rating_1 + is_performing_council_task = task_chivalry + } + } +} + +spouse_martial_tier_2_trigger = { + scope:councillor = { + opinion = { + target = liege + value > 30 + } + OR = { + has_character_modifier = councillor_spouse_martial_2_modifier + has_trait = strategist + martial >= spouse_skill_rating_3 + AND = { + is_performing_council_task = task_chivalry + OR = { + martial >= spouse_skill_rating_2 + has_character_modifier = councillor_spouse_martial_2_modifier + has_character_modifier = councillor_spouse_martial_1_modifier + has_trait = strategist + } + } + } + } +} + +spouse_martial_tier_3_trigger = { + scope:councillor = { + opinion = { + target = liege + value > 50 + } + OR = { + has_trait = strategist + martial >= spouse_skill_rating_4 + AND = { + is_performing_council_task = task_chivalry + OR = { + martial >= spouse_skill_rating_2 + has_character_modifier = councillor_spouse_martial_2_modifier + has_trait = strategist + } + } + } + } +} + + + +#Stewardship +spouse_stewardship_tier_1_trigger = { + scope:councillor = { + OR = { + has_character_modifier = councillor_spouse_stewardship_2_modifier + has_character_modifier = councillor_spouse_stewardship_1_modifier + has_trait = architect + stewardship >= spouse_skill_rating_1 + is_performing_council_task = task_manage_domain + } + } +} + +spouse_stewardship_tier_2_trigger = { + scope:councillor = { + opinion = { + target = liege + value > 30 + } + OR = { + has_character_modifier = councillor_spouse_stewardship_2_modifier + has_trait = architect + stewardship >= spouse_skill_rating_3 + AND = { + is_performing_council_task = task_manage_domain + OR = { + stewardship >= spouse_skill_rating_2 + has_character_modifier = councillor_spouse_stewardship_2_modifier + has_character_modifier = councillor_spouse_stewardship_1_modifier + has_trait = architect + } + } + } + } +} + +spouse_stewardship_tier_3_trigger = { + scope:councillor = { + opinion = { + target = liege + value > 50 + } + OR = { + has_trait = architect + stewardship >= spouse_skill_rating_4 + AND = { + is_performing_council_task = task_manage_domain + OR = { + stewardship >= spouse_skill_rating_2 + has_character_modifier = councillor_spouse_stewardship_2_modifier + has_trait = architect + } + } + } + } +} + + + + +#Learning +spouse_learning_tier_1_trigger = { + scope:councillor = { + OR = { + has_character_modifier = councillor_spouse_learning_2_modifier + has_character_modifier = councillor_spouse_learning_1_modifier + has_trait = scholar + learning >= spouse_skill_rating_1 + is_performing_council_task = task_patronage + } + } +} + +spouse_learning_tier_2_trigger = { + scope:councillor = { + opinion = { + target = liege + value > 30 + } + OR = { + has_character_modifier = councillor_spouse_learning_2_modifier + has_trait = scholar + learning >= spouse_skill_rating_3 + AND = { + is_performing_council_task = task_patronage + OR = { + learning >= spouse_skill_rating_2 + has_character_modifier = councillor_spouse_learning_2_modifier + has_character_modifier = councillor_spouse_learning_1_modifier + has_trait = scholar + } + } + } + } +} + +spouse_learning_tier_3_trigger = { + scope:councillor = { + opinion = { + target = liege + value > 50 + } + OR = { + has_trait = scholar + learning >= spouse_skill_rating_4 + AND = { + is_performing_council_task = task_patronage + OR = { + learning >= spouse_skill_rating_2 + has_character_modifier = councillor_spouse_learning_2_modifier + has_trait = scholar + } + } + } + } +} + +# Court Espionage task triggers +spymaster_task_find_secrets_interesting_secret_type_trigger = { + save_temporary_scope_as = suitable_secret + trigger_if = { + limit = { + secret_type = secret_disputed_heritage + exists = secret_target + } + NOT = { secret_target = { has_trait = legitimized_bastard } } + } + OR = { + secret_is_always_interesting_trigger = yes + is_blackmailable_secret_trigger = { BLACKMAILER = scope:councillor_liege PARTICIPANT = scope:suitable_secret.secret_owner } + } +} + +spymaster_task_find_secrets_block_spymaster_self_reveal_trigger = { + # Spymaster should not reveal secrets targeting themselves unless it is a murder attempt + trigger_if = { + limit = { + exists = secret_target + NOT = { secret_type = secret_murder_attempt } + } + NOT = { secret_target = scope:councillor } + } + # If the spymaster is the father of a secret bastard, don't reveal that + trigger_if = { + limit = { + OR = { + secret_type = secret_disputed_heritage + secret_type = secret_unmarried_illegitimate_child + } + exists = secret_target.real_father + } + NOT = { secret_target.real_father = scope:councillor } + } +} + +spymaster_task_find_secrets_suitable_minor_secret_trigger = { + OR = { + is_shunned_for = secret_owner + AND = { + NOT = { + is_blackmailable_secret_trigger = { + PARTICIPANT = secret_owner + BLACKMAILER = scope:councillor_liege + } + } + secret_is_always_interesting_trigger = yes + } + } + NOT = { is_known_by = scope:councillor_liege } + spymaster_task_find_secrets_block_spymaster_self_reveal_trigger = yes + NOT = { + any_secret_participant = { + OR = { + this = scope:councillor + this = scope:councillor_liege + } + } + } + spymaster_task_find_secrets_interesting_secret_type_trigger = yes +} + +spymaster_task_find_secrets_suitable_major_secret_trigger = { + is_criminal_for = secret_owner + NOT = { is_known_by = scope:councillor_liege } + spymaster_task_find_secrets_block_spymaster_self_reveal_trigger = yes + NOT = { + any_secret_participant = { + OR = { + this = scope:councillor + this = scope:councillor_liege + } + } + } + spymaster_task_find_secrets_interesting_secret_type_trigger = yes +} + +spymaster_task_find_secrets_court_has_minor_secrets_trigger = { + OR = { + AND = { + has_any_secrets = yes + any_secret = { + spymaster_task_find_secrets_suitable_minor_secret_trigger = yes + } + } + any_vassal = { + has_any_secrets = yes + NOT = { this = scope:councillor_liege } + NOT = { this = scope:councillor } + any_secret = { + spymaster_task_find_secrets_suitable_minor_secret_trigger = yes + } + } + any_courtier_or_guest = { + has_any_secrets = yes + NOT = { this = scope:councillor_liege } + NOT = { this = scope:councillor } + any_secret = { + spymaster_task_find_secrets_suitable_minor_secret_trigger = yes + } + } + } +} + +spymaster_task_find_secrets_court_has_major_secrets_trigger = { + OR = { + AND = { + has_any_secrets = yes + any_secret = { + spymaster_task_find_secrets_suitable_major_secret_trigger = yes + } + } + any_vassal = { + has_any_secrets = yes + NOT = { this = scope:councillor_liege } + NOT = { this = scope:councillor } + any_secret = { + spymaster_task_find_secrets_suitable_major_secret_trigger = yes + } + } + any_courtier_or_guest = { + has_any_secrets = yes + NOT = { this = scope:councillor_liege } + NOT = { this = scope:councillor } + any_secret = { + spymaster_task_find_secrets_suitable_major_secret_trigger = yes + } + } + } +} + +spymaster_find_secrets_secret_holder_is_interesting_to_me_trigger = { + scope:councillor_liege = { + save_temporary_scope_as = me + } + exists = scope:secret_holder + scope:secret_holder = { + OR = { + is_ruler = yes + is_close_or_extended_family_of = scope:me + is_courtier_of = scope:me + has_relation_rival = scope:me + has_relation_lover = scope:me + is_player_heir_of = scope:me + } + } +} + +spymaster_find_secrets_secret_target_is_interesting_to_me_trigger = { + scope:councillor_liege = { + save_temporary_scope_as = me + } + trigger_if = { + limit = { + exists = secret_target + } + secret_target = { + OR = { + is_close_or_extended_family_of = scope:me + is_courtier_of = scope:me + has_relation_rival = scope:me + has_relation_lover = scope:me + is_player_heir_of = scope:me + } + } + } + trigger_else = { + always = no + } +} + + +# Event triggers +# Defined here because they need to be used in event + council task desc + +marshal_task_1101_county_trigger = { + holder = root + NOT = { + has_county_modifier = marshal_task_organized_service_modifier + } +} + +marshal_task_1102_county_trigger = { + NOT = { + has_county_modifier = marshal_task_military_presence_modifier + } +} + +marshal_task_1003_county_trigger = { + is_valid_for_county_corruption_trigger = yes + OR = { + NOT = { has_county_modifier = county_corruption_unsafe_highways_modifier } + NOT = { has_county_modifier = county_corruption_thieves_guild_modifier } + NOT = { has_county_modifier = county_corruption_bandits_rampant_modifier } + } +} + +steward_task_county_corruption_county_trigger = { + holder = { + OR = { + is_ai = yes + this = root + } + } +} + +councillor_spouse_learning_2603_valid_councillor_trigger = { + is_available_ai_adult = yes + NOT = { this = scope:councillor } +} + + +councillor_liege_has_erudition_legacy_5_perk = { + exists = scope:councillor_liege.dynasty + scope:councillor_liege.dynasty = { has_dynasty_perk = erudition_legacy_5 } +} + + +councillor_liege_has_customs_legacy_perk = { + exists = scope:councillor_liege.dynasty + scope:councillor_liege.dynasty = { has_dynasty_perk = ep1_culture_legacy_2 } +} + +councillor_liege_has_family_business_bonus = { + exists = scope:councillor_liege.culture + exists = scope:councillor + scope:councillor_liege.culture = { has_cultural_parameter = close_family_better_councillors } + scope:councillor = { + is_close_family_of = scope:councillor_liege + } +} + +councillor_liege_has_consulted_house_bonus = { + scope:councillor_liege ?= { has_character_flag = fp3_consulted_house } + exists = scope:councillor_liege.house + exists = scope:councillor.house + scope:councillor ?= { house = scope:councillor_liege.house } +} + +councillor_is_unskilled_trigger = { + trigger_if = { + limit = { $EMPLOYER$.cp:councillor_chancellor ?= this } + diplomacy < mediocre_skill_rating + } + trigger_else_if = { + limit = { $EMPLOYER$.cp:councillor_steward ?= this } + stewardship < mediocre_skill_rating + } + trigger_else_if = { + limit = { $EMPLOYER$.cp:councillor_marshal ?= this } + martial < mediocre_skill_rating + } + trigger_else_if = { + limit = { $EMPLOYER$.cp:councillor_spymaster ?= this } + intrigue < mediocre_skill_rating + } + trigger_else = { learning < mediocre_skill_rating } +} + +councillor_is_skilled_trigger = { + trigger_if = { + limit = { $EMPLOYER$.cp:councillor_chancellor ?= this } + diplomacy > decent_skill_rating + } + trigger_else_if = { + limit = { $EMPLOYER$.cp:councillor_steward ?= this } + stewardship > decent_skill_rating + } + trigger_else_if = { + limit = { $EMPLOYER$.cp:councillor_marshal ?= this } + martial > decent_skill_rating + } + trigger_else_if = { + limit = { $EMPLOYER$.cp:councillor_spymaster ?= this } + intrigue > decent_skill_rating + } + trigger_else = { learning > decent_skill_rating } +} + +kurultai_is_skilled_trigger = { + trigger_if = { + limit = { $EMPLOYER$.cp:councillor_kurultai_1 ?= this } + OR = { + average_skill_rating >= sum_of_all_skills_threshold_average + has_any_high_skill_rating = yes + } + } + trigger_else_if = { + limit = { $EMPLOYER$.cp:councillor_kurultai_2 ?= this } + OR = { + average_skill_rating >= sum_of_all_skills_threshold_average + has_any_high_skill_rating = yes + } + } + trigger_else_if = { + limit = { $EMPLOYER$.cp:councillor_kurultai_3 ?= this } + OR = { + average_skill_rating >= sum_of_all_skills_threshold_average + has_any_high_skill_rating = yes + } + } + trigger_else_if = { + limit = { $EMPLOYER$.cp:councillor_kurultai_4 ?= this } + OR = { + average_skill_rating >= sum_of_all_skills_threshold_average + has_any_high_skill_rating = yes + } + } + trigger_else = { intrigue > decent_skill_rating } # Spymaster +} + +#FP3 Legacy Track: +councillor_liege_has_khvarenah_legacy_perk = { + exists = scope:councillor_liege.dynasty + scope:councillor_liege.dynasty = { has_dynasty_perk = fp3_khvarenah_legacy_4 } +} + +can_be_knight_now_light_trigger = { + is_alive = yes + is_ai = yes # Players can't be knights + is_adult = yes + is_imprisoned = no +} + +can_be_trained_as_knight_now_light_trigger = { + can_be_knight_now_light_trigger = yes + is_in_army = no + has_contagious_deadly_disease_trigger = no + NOT = { has_trait = incapable } + custom_description = { + text = ALREADY_IN_ACTIVITY + NOR = { + exists = involved_activity + has_variable = homage_liege_scope + has_character_flag = meditation_character_flag + has_character_flag = petition_liege_character_flag + has_character_flag = holding_court_character_flag + is_being_visited_on_tour_strict = yes + } + } + custom_description = { + text = ALREADY_PLANNING_ACTIVITY + NOT = { has_character_flag = planning_an_activity } + } + # Variable set within the adventure inspiration events + NOT = { has_variable = gone_adventuring } +} + +teacher_has_trait_that_student_does_not_trigger = { + OR = { + AND = { + $TEACHER$ = { has_trait = logistician } + $STUDENT$ = { NOT = { has_trait = logistician } } + } + AND = { + $TEACHER$ = { has_trait = military_engineer } + $STUDENT$ = { NOT = { has_trait = military_engineer } } + } + AND = { + $TEACHER$ = { has_trait = aggressive_attacker } + $STUDENT$ = { NOT = { has_trait = aggressive_attacker } } + } + AND = { + $TEACHER$ = { has_trait = unyielding_defender } + $STUDENT$ = { NOT = { has_trait = unyielding_defender } } + } + AND = { + $TEACHER$ = { has_trait = forder } + $STUDENT$ = { NOT = { has_trait = forder } } + } + AND = { + $TEACHER$ = { has_trait = flexible_leader } + $STUDENT$ = { NOT = { has_trait = flexible_leader } } + } + AND = { + $TEACHER$ = { has_trait = desert_warrior } + $STUDENT$ = { NOT = { has_trait = desert_warrior } } + } + AND = { + $TEACHER$ = { has_trait = jungle_stalker } + $STUDENT$ = { NOT = { has_trait = jungle_stalker } } + } + AND = { + $TEACHER$ = { has_trait = winter_soldier } + $STUDENT$ = { NOT = { has_trait = winter_soldier } } + } + AND = { + $TEACHER$ = { has_trait = reaver } + $STUDENT$ = { NOT = { has_trait = reaver } } + } + AND = { + $TEACHER$ = { has_trait = reckless } + $STUDENT$ = { NOT = { has_trait = reckless } } + } + AND = { + $TEACHER$ = { has_trait = holy_warrior } + $STUDENT$ = { NOT = { has_trait = holy_warrior } } + } + AND = { + $TEACHER$ = { has_trait = open_terrain_expert } + $STUDENT$ = { NOT = { has_trait = open_terrain_expert } } + } + AND = { + $TEACHER$ = { has_trait = rough_terrain_expert } + $STUDENT$ = { NOT = { has_trait = rough_terrain_expert } } + } + AND = { + $TEACHER$ = { has_trait = forest_fighter } + $STUDENT$ = { NOT = { has_trait = forest_fighter } } + } + AND = { + $TEACHER$ = { has_trait = cautious_leader } + $STUDENT$ = { NOT = { has_trait = cautious_leader } } + } + AND = { + $TEACHER$ = { has_trait = organizer } + $STUDENT$ = { NOT = { has_trait = organizer } } + } + } +} diff --git a/common/scripted_triggers/00_county_corruption_triggers.txt b/common/scripted_triggers/00_county_corruption_triggers.txt new file mode 100644 index 00000000..088876e8 --- /dev/null +++ b/common/scripted_triggers/00_county_corruption_triggers.txt @@ -0,0 +1,47 @@ + +###TRIGGER LIST + +# has_county_corruption_trigger - Does the County have any corruption modifiers +# immune_to_county_corruption_trigger - Is the County immune to corruption for any reason +# is_valid_for_county_corruption_trigger - Can County Corruption be applied in this County + +has_county_corruption_trigger = { + OR = { + has_county_modifier = county_corruption_inefficient_tax_collection_modifier + has_county_modifier = county_corruption_deserting_levies_modifier + has_county_modifier = county_corruption_smuggling_ring_modifier + has_county_modifier = county_corruption_bandits_rampant_modifier + has_county_modifier = county_corruption_inefficient_census_modifier + has_county_modifier = county_corruption_lack_of_sheriffs_modifier + has_county_modifier = county_corruption_lack_of_courts_modifier + has_county_modifier = county_corruption_thieves_guild_modifier + has_county_modifier = county_corruption_unsafe_highways_modifier + has_county_modifier = county_corruption_uncooperative_guilds_modifier + has_county_modifier = county_corruption_lackluster_administration_modifier + has_county_modifier = county_corruption_roaming_bandits_modifier + has_county_modifier = county_corruption_wild_beast_attacks_modifier + has_county_modifier = county_corruption_upset_shepherds_modifier + has_county_modifier = county_corruption_rogue_warriors_modifier + has_county_modifier = county_corruption_unruly_nomads_modifier + has_county_modifier = small_investment_in_revolt_modifier + has_county_modifier = medium_investment_in_revolt_modifier + has_county_modifier = high_investment_in_revolt_modifier + } +} + +immune_to_county_corruption_trigger = { + OR = { + is_landless_type_title = yes + has_variable = corruption_event_happening + has_variable = county_corruption_recent_removal + is_target_of_council_task = task_increase_control + has_county_modifier = marshal_task_military_presence_modifier + } +} + +is_valid_for_county_corruption_trigger = { + NOT = { + county_corruption_modifier_count >= max_county_corruption_modifiers_at_once + } + immune_to_county_corruption_trigger = no +} diff --git a/common/scripted_triggers/00_court_position_triggers.txt b/common/scripted_triggers/00_court_position_triggers.txt new file mode 100644 index 00000000..8305d602 --- /dev/null +++ b/common/scripted_triggers/00_court_position_triggers.txt @@ -0,0 +1,1682 @@ +# Grants a random unfilled court position based on skills and traits using CANDIDATE - ROOT is ruler +any_court_position_available_trigger = { + OR = { + NOT = { employs_court_position = royal_architect_court_position } + NOT = { employs_court_position = seneschal_court_position } + NOT = { employs_court_position = court_tutor_court_position } + NOT = { employs_court_position = high_almoner_court_position } + NOT = { employs_court_position = court_physician_court_position } + NOT = { employs_court_position = antiquarian_court_position } + NOT = { employs_court_position = master_of_horse_court_position } + AND = { + $CANDIDATE$ = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = ROOT } + } + NOT = { employs_court_position = bodyguard_court_position } + } + AND = { + $CANDIDATE$ = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = ROOT } + } + NOT = { employs_court_position = champion_court_position } + } + NOT = { employs_court_position = master_of_hunt_court_position } + NOT = { employs_court_position = court_poet_court_position } + NOT = { employs_court_position = court_musician_court_position } + NOT = { employs_court_position = cupbearer_court_position } + AND = { + is_female = yes + $CANDIDATE$ = { is_female = yes } + NOT = { employs_court_position = lady_in_waiting_court_position } + } + AND = { + culture = { has_cultural_parameter = can_appoint_chief_eunuch } + $CANDIDATE$ = { is_eunuch_trigger = yes } + NOT = { employs_court_position = chief_eunuch_court_position } + } + AND = { + culture = { has_cultural_parameter = can_appoint_court_gardener } + NOT = { employs_court_position = court_gardener_court_position } + } + AND = { + $CANDIDATE$ = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = ROOT } + } + NOT = { employs_court_position = akolouthos_court_position } + } + AND = { + government_has_flag = government_is_nomadic + OR = { + has_religion = religion:tengrism_religion + culture = { has_cultural_pillar = heritage_mongolic } + culture = { has_cultural_pillar = heritage_turkic } + } + NOT = { employs_court_position = court_astrologer_court_position } + } + AND = { + government_has_flag = government_is_nomadic + NOT = { employs_court_position = boyan_court_position } + } + AND = { + has_trait = military_engineer + NOT = { employs_court_position = siege_engineer_court_position } + } + AND = { + government_has_flag = government_is_nomadic + NOT = { employs_court_position = yurtchi_court_position } + } + AND = { + government_has_flag = government_is_nomadic + NOT = { employs_court_position = cherbi_court_position } + } + AND = { + government_has_flag = government_is_nomadic + NOT = { employs_court_position = yeke_jarquchi_court_position } + } + AND = { + NOT = { root.culture = $CANDIDATE$.culture } + NOT = { employs_court_position = foreign_emissary_court_position } + } + AND = { + government_has_flag = government_is_nomadic + NOT = { employs_court_position = keeper_of_the_horses_court_position } + } + } +} + +# Used in the trigger for court positions to make sure that they don't already have a "job" +# If a court position is considered a full time job, the character cannot hold another similar position +court_position_does_not_already_have_a_job_trigger = { + custom_tooltip = { + text = does_not_have_a_full_time_job + NOR = { + has_court_position = court_tutor_court_position + has_court_position = food_taster_court_position + has_court_position = seneschal_court_position + has_court_position = cupbearer_court_position + has_court_position = antiquarian_court_position + has_court_position = lady_in_waiting_court_position + has_court_position = court_jester_court_position + has_court_position = court_poet_court_position + has_court_position = court_musician_court_position + has_court_position = bodyguard_court_position + has_court_position = executioner_court_position + has_court_position = court_gardener_court_position + has_court_position = travel_leader_court_position + has_court_position = wet_nurse_court_position + has_court_position = akolouthos_court_position + is_councillor = yes + } + } +} + +# IMPORTANT: This should be used before most instances of appoint_court_position - CU +# Checks that you can employ a specific character to a specific court position at a given moment. This prevents errors from randomly trying to already hire the holder of that court position in some cases. +# Trigger should be used in the scope of the hiring liege +# $COURT_POS$ is the position to which you want to appoint a character +# $CHAR$ is the character you wish to appoint +can_appoint_char_to_court_position = { + save_temporary_scope_as = hiring_liege + can_employ_court_position_type = $COURT_POS$ + $CHAR$ = { + NOT = { this = scope:hiring_liege } + NOT = { has_court_position = $COURT_POS$ } + can_be_employed_as = $COURT_POS$ + } +} + +can_appoint_char_to_any_court_position = { + OR = { + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = court_physician_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = cultural_emissary_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = keeper_of_swans_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = chief_qadi_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = garuda_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = court_gardener_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = lady_in_waiting_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = antiquarian_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = travel_leader_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = wet_nurse_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = court_tutor_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = food_taster_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = master_of_horse_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = master_of_hunt_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = royal_architect_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = high_almoner_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = seneschal_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = cupbearer_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = chief_eunuch_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = court_jester_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = court_poet_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = court_musician_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = bodyguard_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = champion_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = executioner_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = court_artificer_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = master_assassin_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = cave_hermit_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = chronicler_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = court_scholar_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = charioteer_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = bookmaker_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = akolouthos_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = court_brewmaster_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = court_astrologer_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = boyan_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = siege_engineer_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = yurtchi_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = cherbi_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = yeke_jarquchi_court_position } + can_appoint_char_to_court_position = { CHAR = $CHAR$ COURT_POS = keeper_of_the_horses_court_position } + } +} + +has_diplomacy_court_position = { + OR = { + has_court_position = court_poet_court_position + has_court_position = court_musician_court_position + has_court_position = court_jester_court_position + has_court_position = cupbearer_court_position + has_court_position = lady_in_waiting_court_position + has_court_position = chronicler_court_position + has_court_position = yeke_jarquchi_court_position + has_court_position = foreign_emissary_court_position + } +} + +has_martial_court_position = { + OR = { + has_court_position = master_of_horse_court_position + has_court_position = bodyguard_court_position + has_court_position = champion_court_position + has_court_position = master_of_hunt_court_position + has_court_position = akolouthos_court_position + has_court_position = boyan_court_position + has_court_position = siege_engineer_court_position + has_court_position = cherbi_court_position + has_court_position = keeper_of_the_horses_court_position + } +} + +has_stewardship_court_position = { + OR = { + has_court_position = royal_architect_court_position + has_court_position = seneschal_court_position + has_court_position = keeper_of_swans_court_position + has_court_position = court_gardener_court_position + has_court_position = yurtchi_court_position + } +} + +has_intrigue_court_position = { + OR = { + has_court_position = food_taster_court_position + has_court_position = chief_eunuch_court_position + has_court_position = master_assassin_court_position + } +} + +has_learning_court_position = { + OR = { + has_court_position = court_tutor_court_position + has_court_position = high_almoner_court_position + has_court_position = court_physician_court_position + has_court_position = antiquarian_court_position + has_court_position = cave_hermit_court_position + has_court_position = court_scholar_court_position + has_court_position = court_brewmaster_court_position + has_court_position = court_astrologer_court_position + } +} + +court_position_stewardship_trigger = { # Is courtier suited to stewardship positions? + OR = { + has_education_stewardship_trigger = yes + has_trait = diligent + stewardship >= medium_skill_rating + } +} + +court_position_martial_trigger = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } + OR = { + number_of_commander_traits > 0 + has_trait = brave + prowess >= mediocre_skill_rating + has_trait = viking + has_trait = varangian + has_trait = berserker + has_trait = shieldmaiden + has_trait = lifestyle_blademaster + has_trait = education_martial_prowess + } +} + +court_position_learning_trigger = { # Is courtier suited to learning positions? + OR = { + has_education_learning_trigger = yes + has_trait = devoted + } +} + +base_court_position_validity_trigger = { # would_be_valid_for_court_position ultimately traces back to this, so touch with caution + is_imprisoned = no + NOT = { is_at_war_with = $EMPLOYER$ } +} +royal_architect_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +seneschal_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + OR = { + is_landed = no + stewardship >= 12 + } + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = seneschal_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +court_tutor_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + OR = { + is_landed = no + learning >= 12 + } + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = court_tutor_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +high_almoner_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + OR = { + is_landed = no + learning >= 12 + } +} + +court_physician_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no +} + +antiquarian_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + OR = { + is_landed = no + learning >= 12 + } + + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = antiquarian_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +master_of_horse_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +bodyguard_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + NOR = { + has_trait = blind + has_trait = infirm + } + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = bodyguard_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +champion_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + NOR = { + has_trait = blind + has_trait = infirm + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } +} + +master_of_hunt_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + NOR = { + has_trait = blind + has_trait = infirm + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } +} + +court_poet_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = court_poet_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +court_musician_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + OR = { + is_landed = no + diplomacy >= 12 + } + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = court_musician_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +court_jester_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = court_jester_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +executioner_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_adult = yes + is_landed = no + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + OR = { + custom_tooltip = { + text = has_imprisonment_reason_no_subject + $EMPLOYER$ = { has_imprisonment_reason = prev } + } + custom_tooltip = { + text = is_imprisoned_court_position_executioner + trigger_if = { # Imprisoned characters should only be valid if they aren't already the executioner + limit = { + is_imprisoned = yes + NOT = { has_court_position = executioner_court_position } + } + is_imprisoned_by = $EMPLOYER$ + } + } + custom_tooltip = { + text = has_strong_hook_no_subject + $EMPLOYER$ = { has_strong_usable_hook = prev } + } + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = executioner_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +food_taster_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } + custom_tooltip = { + text = faith_allows_recruitment_court_position + trigger_if = { + limit = { + scope:liege.faith = { + NOT = { has_doctrine = doctrine_clerical_function_recruitment } + } + } + is_clergy = no + } + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = food_taster_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +cupbearer_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = cupbearer_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +lady_in_waiting_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + is_female = yes + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = lady_in_waiting_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +chief_eunuch_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + is_eunuch_trigger = yes +} + +court_gardener_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + OR = { + is_landed = no + stewardship >= 12 + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = court_gardener_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +court_artificer_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + OR = { + custom_tooltip = { + text = has_a_completed_inspiration + has_completed_inspiration = yes + } + custom_tooltip = { + text = has_an_inspiration + exists = inspiration + } + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = court_artificer_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +cultural_emissary_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + diplomacy >= 8 +} + +chief_qadi_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + has_religion = religion:islam_religion + has_trait = education_learning + custom_tooltip = { + text = MATCHING_FAITH_DOCTRINE_GENDER + trigger_if = { + limit = { $EMPLOYER$.faith = { has_doctrine = doctrine_gender_male_dominated } } + is_male = yes + } + trigger_if = { + limit = { $EMPLOYER$.faith = { has_doctrine = doctrine_gender_female_dominated } } + is_female = yes + } + trigger_else = { always = yes } + } +} + +garuda_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_knight = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } +} + +keeper_of_swans_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +travel_leader_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + is_clergy = no + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + custom_tooltip = { + text = IS_NOT_APPLICABLE_DIARCH_COURT_POSITION + trigger_if = { + limit = { bannable_serving_diarch_trigger = yes } + bannable_serving_diarch_trigger = no + } + } + custom_tooltip = { + text = IS_NOT_GONE_ADVENTURING + trigger_if = { + limit = { has_variable = gone_adventuring } + NOT = { has_variable = gone_adventuring } + } + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = travel_leader_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +wet_nurse_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_playable_character = no + is_female = yes + custom_tooltip = { + text = wet_nurse_age_tt + age < 46 + } + custom_tooltip = { + text = NONE_IS_NOT_CLOSE_FAMILY_OF_CHARACTER_COURT_POSITION + NOT = { is_close_family_of = $EMPLOYER$ } + } + custom_tooltip = { + text = none_has_no_particular_noble_roots_trigger + has_no_particular_noble_roots_trigger = yes + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = wet_nurse_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + # Nuns cannot be wet nurses + NOT = { has_trait = devoted } +} + +cave_hermit_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_playable_character = no + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + has_trait = lifestyle_mystic + has_trait_xp = { + trait = lifestyle_mystic + value >= 50 + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = cave_hermit_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +master_assassin_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_playable_character = no # You can't be a public figure and a master assassin + custom_tooltip = { + text = none_has_no_particular_noble_roots_trigger + has_no_particular_noble_roots_trigger = yes + } + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + custom_tooltip = { + text = faith_allows_master_assassin + faith = { + has_doctrine = tenet_fp3_fedayeen + NOR = { + has_doctrine = tenet_pacifism + has_doctrine = tenet_dharmic_pacifism + } + } + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = master_assassin_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +court_scholar_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_adult = yes + is_landed = no #A requirement for inspirations + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = court_scholar_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +chronicler_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + OR = { + is_landed = no + diplomacy >= 12 + } +} + +akolouthos_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } # check culture of warrior not liege + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + OR = { + culture = { + OR = { + custom_tooltip = { + text = court_position_fp1_coastal_warriors + has_cultural_tradition = tradition_fp1_coastal_warriors + } + custom_tooltip = { + text = court_position_hird + has_cultural_tradition = tradition_hird + } + custom_tooltip = { + text = court_position_fp1_performative_honour + has_cultural_tradition = tradition_fp1_performative_honour + } + custom_tooltip = { + text = court_position_north_germanic + has_cultural_pillar = heritage_north_germanic + } + custom_tooltip = { + text = court_position_west_germanic + has_cultural_pillar = heritage_west_germanic + } + } + } + AND = { + has_trait = loyal + culture = { + NOR = { + custom_tooltip = { + text = court_position_not_same_culture_heritage + has_same_culture_heritage = $EMPLOYER$.culture + } + custom_tooltip = { + text = court_position_not_same_culture_language + has_same_culture_language = $EMPLOYER$.culture + } + } + } + } + } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = akolouthos_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +court_brewmaster_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + drinks_alcohol_trigger = yes + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = court_brewmaster_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + OR = { + learning >= 12 + has_trait = lifestyle_reveler + has_trait = diligent + has_trait = patient + } +} + +court_astrologer_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + OR = { + has_religion = religion:tengrism_religion + custom_tooltip = { + text = court_position_mongolic + culture = { has_cultural_pillar = heritage_mongolic } + } + custom_tooltip = { + text = court_position_turkic + culture = { has_cultural_pillar = heritage_turkic } + } + has_trait = nomadic_philosophy + has_trait = lifestyle_mystic + $EMPLOYER$.domicile.domicile_culture ?= culture + } + custom_tooltip = { + text = court_position_not_kurultai + is_councillor = no + } +} + +boyan_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } + custom_tooltip = { + text = court_position_nomadic + government_has_flag = government_is_nomadic + } + custom_tooltip = { + text = boyan_validity_trigger_tt + trigger_if = { + limit = { + NOT = { + has_court_position = boyan_court_position + } + } + martial >= 12 + } + } +} + +siege_engineer_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + has_trait = military_engineer +} + +yurtchi_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + custom_tooltip = { + text = court_position_nomadic + government_has_flag = government_is_nomadic + } + custom_tooltip = { + text = yurtchi_validity_trigger_tt + trigger_if = { + limit = { + NOT = { + has_court_position = yurtchi_court_position + } + } + stewardship >= 12 + } + } +} + +cherbi_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } + is_landed = no + custom_tooltip = { + text = court_position_nomadic + government_has_flag = government_is_nomadic + } + custom_tooltip = { + text = cherbi_validity_trigger_tt + trigger_if = { + limit = { + NOT = { + has_court_position = cherbi_court_position + } + } + prowess >= 12 + } + } +} + +yeke_jarquchi_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + custom_tooltip = { + text = court_position_nomadic + government_has_flag = government_is_nomadic + } + custom_tooltip = { + text = yeke_jarquchi_validity_trigger_tt + trigger_if = { + limit = { + NOT = { + has_court_position = yeke_jarquchi_court_position + } + } + diplomacy >= 12 + } + } +} + +foreign_emissary_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + custom_tooltip = { + text = court_position_different_culture + NOT = { culture = $EMPLOYER$.culture } + } +} + +keeper_of_the_horses_validity_trigger = { + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + is_landed = no + custom_tooltip = { + text = court_position_nomadic + government_has_flag = government_is_nomadic + } + custom_tooltip = { + text = keeper_of_the_horses_validity_trigger_tt + trigger_if = { + limit = { + NOT = { + has_court_position = keeper_of_the_horses_court_position + } + } + prowess >= 12 + } + } +} + +court_position_generator_pickable_trigger = { + $EMPLOYER$ = { + OR = { + can_employ_court_position_type = $POS$_court_position + employs_court_position = $POS$_court_position + } + } + NOT = { has_court_position = $POS$_court_position } + trigger_if = { + limit = { liege ?= $EMPLOYER$ } + can_be_employed_as = $POS$_court_position + } + trigger_else = { + $POS$_validity_trigger = { EMPLOYER = $EMPLOYER$ } + } + trigger_if = { + limit = { exists = var:target_court_position } + NOT = { var:target_court_position = flag:$POS$ } + } + trigger_if = { + limit = { exists = var:second_court_position } + NOT = { var:second_court_position = flag:$POS$ } + } + trigger_if = { + limit = { exists = scope:eunuch } + NOT = { + $EMPLOYER$ = { + any_court_position_holder = { + type = $POS$_court_position + is_close_family_of = scope:eunuch + } + } + } + } +} + +camp_officer_generator_pickable_trigger = { + $EMPLOYER$ = { + OR = { + can_employ_court_position_type = $POS$_camp_officer + employs_court_position = $POS$_camp_officer + } + } + NOT = { has_court_position = $POS$_camp_officer } + would_be_valid_for_court_position = { + court_position = $POS$_camp_officer + employer = $EMPLOYER$ + } + trigger_if = { + limit = { exists = var:target_court_position } + NOT = { var:target_court_position = flag:$POS$ } + } + trigger_if = { + limit = { exists = var:second_court_position } + NOT = { var:second_court_position = flag:$POS$ } + } +} + +# Set to 0 with Dynasty Perk Inner Circle +court_position_inner_circle_salary_trigger = { + trigger_if = { + limit = { exists = scope:liege } + scope:liege ?= { + dynasty ?= { has_dynasty_perk = fp2_coterie_legacy_1 } + employs_court_position = $POS$_court_position + any_court_position_holder = { + type = $POS$_court_position + house ?= scope:liege.house + } + } + } + trigger_else = { always = no } +} + +# Halved via obligation hook +court_position_obligation_hook_salary_trigger = { + trigger_if = { + limit = { exists = $LIEGE$ } + $LIEGE$ = { + employs_court_position = $POS$_court_position + any_court_position_holder = { + type = $POS$_court_position + $LIEGE$ = { + OR = { + has_hook_of_type = { + type = obligation_hook + target = prev + } + has_hook_of_type = { + type = strong_obligation_hook + target = prev + } + } + } + } + } + } + trigger_else = { always = no } +} + +can_be_employed_as_any_court_position_trigger = { + OR = { + can_be_employed_as = court_poet_court_position + can_be_employed_as = court_musician_court_position + can_be_employed_as = court_jester_court_position + can_be_employed_as = cupbearer_court_position + can_be_employed_as = lady_in_waiting_court_position + can_be_employed_as = chronicler_court_position + can_be_employed_as = master_of_horse_court_position + can_be_employed_as = bodyguard_court_position + can_be_employed_as = champion_court_position + can_be_employed_as = master_of_hunt_court_position + can_be_employed_as = akolouthos_court_position + can_be_employed_as = royal_architect_court_position + can_be_employed_as = seneschal_court_position + can_be_employed_as = keeper_of_swans_court_position + can_be_employed_as = court_gardener_court_position + can_be_employed_as = food_taster_court_position + can_be_employed_as = chief_eunuch_court_position + can_be_employed_as = master_assassin_court_position + can_be_employed_as = court_tutor_court_position + can_be_employed_as = high_almoner_court_position + can_be_employed_as = court_physician_court_position + can_be_employed_as = antiquarian_court_position + can_be_employed_as = cave_hermit_court_position + can_be_employed_as = court_scholar_court_position + can_be_employed_as = court_brewmaster_court_position + can_be_employed_as = court_astrologer_court_position + can_be_employed_as = boyan_court_position + can_be_employed_as = siege_engineer_court_position + can_be_employed_as = yurtchi_court_position + can_be_employed_as = cherbi_court_position + can_be_employed_as = yeke_jarquchi_court_position + can_be_employed_as = foreign_emissary_court_position + can_be_employed_as = keeper_of_the_horses_court_position + } +} + +court_position_petition_ai_weight_trigger = { + scope:employee.var:petition_court_position_liege ?= scope:liege + scope:employee.var:petition_court_position_role ?= flag:$ROLE$ +} + +# Salary halved +court_position_halved_salary_trigger = { + trigger_if = { + limit = { exists = scope:liege } + scope:liege = { + employs_court_position = $POS$_court_position + any_court_position_holder = { + type = $POS$_court_position + scope:liege = { + is_target_in_variable_list = { + name = halved_position_salary_employees + target = prev + } + } + } + } + } + trigger_else = { always = no } +} + +# Salary increased +court_position_increased_salary_trigger = { + trigger_if = { + limit = { exists = scope:liege } + scope:liege = { + employs_court_position = $POS$_court_position + any_court_position_holder = { + type = $POS$_court_position + scope:liege = { + is_target_in_variable_list = { + name = increased_position_salary_employees + target = prev + } + } + } + } + } + trigger_else = { always = no } +} + +# canp officers valid character triggers +valid_camp_officer_trigger = { + scope:employee = { + $OFFICER$_validity_trigger = { EMPLOYER = scope:liege } + } +} + +second_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = second_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +quartermaster_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = quartermaster_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + stewardship >= decent_skill_rating + # Personality. + has_trait = greedy + has_trait = gluttonous + has_trait = diligent + # Misc. + has_trait = logistician + has_trait = organizer + } +} + +armorer_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = armorer_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + stewardship >= decent_skill_rating + # Personality. + has_trait = wrathful + has_trait = gregarious + has_trait = humble + has_trait = diligent + } +} + +chief_forager_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = chief_forager_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + learning >= decent_skill_rating + # Personality. + has_trait = humble + has_trait = eccentric + has_trait = deceitful + has_trait = diligent + # Misc. + has_trait = lifestyle_mystic + has_trait = lifestyle_gardener + has_trait = lifestyle_herbalist + has_trait = lifestyle_physician + has_trait = scholar + has_trait = witch + } +} + +master_thief_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = master_thief_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + intrigue >= decent_skill_rating + # Personality. + has_trait = craven + has_trait = deceitful + has_trait = arbitrary + has_trait = diligent + } +} + +head_porter_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = head_porter_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + martial >= decent_skill_rating + # Personality. + has_trait = humble + has_trait = content + has_trait = diligent + # Misc. + has_trait = athletic + } +} + +head_groom_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = head_groom_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + stewardship >= decent_skill_rating + # Personality. + has_trait = patient + has_trait = calm + has_trait = diligent + } +} + +huntperson_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = huntperson_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + prowess >= decent_skill_rating + # Personality. + has_trait = patient + has_trait = callous + has_trait = brave + has_trait = diligent + # Misc. + has_trait = lifestyle_hunter + has_trait = athletic + } +} + +kennelperson_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = kennelperson_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + martial >= decent_skill_rating + # Personality. + has_trait = gregarious + has_trait = stubborn + has_trait = diligent + } +} + +chief_engineer_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = chief_engineer_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + learning >= decent_skill_rating + # Personality. + has_trait = patient + has_trait = stubborn + has_trait = eccentric + has_trait = diligent + # Misc. + has_trait = military_engineer + has_trait = logistician + } +} + +witness_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = witness_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + diplomacy >= decent_skill_rating + # Personality. + has_trait = honest + has_trait = just + has_trait = brave + } +} + +person_haggler_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = person_haggler_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + diplomacy >= decent_skill_rating + # Personality. + has_trait = callous + has_trait = sadistic + has_trait = greedy + has_trait = diligent + } +} + +camp_cook_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = camp_cook_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + intrigue >= decent_skill_rating + # Personality. + has_trait = gluttonous + has_trait = humble + has_trait = diligent + } +} + +master_bard_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = master_bard_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + diplomacy >= decent_skill_rating + # Personality. + has_trait = gregarious + has_trait = arrogant + has_trait = deceitful + has_trait = diligent + # Misc. + has_trait = poet + has_trait = drunkard + } +} + +stooge_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = stooge_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +master_of_arms_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = master_of_arms_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + martial >= decent_skill_rating + # Personality. + has_trait = brave + has_trait = stubborn + has_trait = callous + has_trait = diligent + # Misc. + has_trait = aggressive_attacker + has_trait = unyielding_defender + has_trait = organizer + } +} + +light_cavalry_captain_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = light_cavalry_captain_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +camelry_captain_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = camelry_captain_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +elephantry_captain_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = elephantry_captain_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +heavy_cavalry_captain_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = heavy_cavalry_captain_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +horse_archer_captain_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = horse_archer_captain_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +archer_captain_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = archer_captain_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +heavy_infantry_captain_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = heavy_infantry_captain_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +light_infantry_captain_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = light_infantry_captain_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +pike_captain_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = pike_captain_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } +} + +master_of_spoils_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = master_of_spoils_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + stewardship >= decent_skill_rating + # Personality. + has_trait = greedy + has_trait = stubborn + has_trait = just + has_trait = diligent + } +} + +laureate_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = laureate_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + # Qualifications. + OR = { + # Skill. + diplomacy >= decent_skill_rating + # Personality. + has_trait = gregarious + has_trait = arrogant + has_trait = fickle + # Misc. + has_trait = poet + has_trait = lifestyle_reveler + } +} + +camp_priest_validity_trigger = { + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = camp_priest_camp_officer } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } + base_court_position_validity_trigger = { EMPLOYER = $EMPLOYER$ } + #have to be the same faith + faith = scope:liege.faith + # Qualifications. + OR = { + # Skill. + learning >= decent_skill_rating + # Personality. + has_trait = zealous + has_trait = gregarious + has_trait = compassionate + has_trait = diligent + # Misc. + has_trait = pilgrim + has_trait = holy_warrior + has_trait = faith_warrior + } +} + +charioteer_validity_trigger = { + is_imprisoned = no + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $EMPLOYER$ } + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = charioteer_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + +bookmaker_validity_trigger = { + is_imprisoned = no + custom_tooltip = { + text = NONE_NOT_THE_SPOUSE_OF_CHARACTER_COURT_POSITION + NOT = { is_spouse_of = $EMPLOYER$ } + } + stewardship >= 8 + custom_tooltip = { + text = none_does_not_have_a_full_time_job + trigger_if = { + limit = { NOT = { has_court_position = bookmaker_court_position } } + court_position_does_not_already_have_a_job_trigger = yes # This positions is considered a job, and cannot be held at the same time as another similar position + } + } +} + + +### Court Position Task Triggers ### +wet_nurse_instill_virtue_trigger = { + NOT = { has_trait = $TRAIT$ } + scope:notification_character.faith = { trait_is_virtue = $TRAIT$ } +} diff --git a/common/scripted_triggers/00_court_role_triggers.txt b/common/scripted_triggers/00_court_role_triggers.txt new file mode 100644 index 00000000..a34d6297 --- /dev/null +++ b/common/scripted_triggers/00_court_role_triggers.txt @@ -0,0 +1,92 @@ +is_non_spouse_councillor_trigger = { + is_available_healthy_ai_adult = yes + NOT = { + is_spouse_of = scope:ruler + } +} + +court_event_ongoing_trigger = { + OR = { + has_local_player_open_court_event = yes + has_local_player_unopened_court_event = yes + } +} + +is_available_non_adventurer_inspired_person_trigger = { + exists = inspiration + is_in_the_same_court_as_or_guest = scope:ruler + is_available_healthy_ai_adult = yes +} + +is_available_schemer = { + save_temporary_scope_as = schemer_check + OR = { + has_owned_scheme = yes + scope:ruler = { + any_targeting_scheme = { + is_hostile = yes + any_scheme_agent_character = { + this = scope:schemer_check + } + } + } + } + is_available_healthy_ai_adult = yes +} + +is_available_non_primary_consort = { + is_available = yes + NOT = {this = primary_spouse } +} + +is_available_non_child_family = { + is_available = yes + is_healthy = yes + child_not_infant_trigger = yes + is_close_or_extended_family_of = scope:ruler +} + +is_incorrect_type_for_throne_trigger = { + trigger_if = { + limit = { + exists = $CHARACTER$.capital_county + } + $CHARACTER$.capital_county.culture = { + OR = { + has_graphical_mena_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + } + } + } + OR = { + has_trait = dwarf + has_trait = giant + is_adult = no + } +} + +is_spouse_incorrect_type_for_throne_trigger = { + trigger_if = { + limit = { + exists = $CHARACTER$.capital_county + } + $CHARACTER$.capital_county.culture = { + OR = { + has_graphical_mena_culture_group_trigger = yes + has_graphical_india_culture_group_trigger = yes + } + } + } + exists = $CHARACTER$.primary_spouse + $CHARACTER$.primary_spouse = { + OR = { + has_trait = dwarf + has_trait = giant + is_adult = no + } + } +} + +has_court_event_flag = { + has_character_flag = in_court_event +} diff --git a/common/scripted_triggers/00_court_scheme_triggers.txt b/common/scripted_triggers/00_court_scheme_triggers.txt new file mode 100644 index 00000000..ad8d9021 --- /dev/null +++ b/common/scripted_triggers/00_court_scheme_triggers.txt @@ -0,0 +1,6 @@ +court_love_is_shunned_or_criminal_trigger = { + OR = { + scope:target = { relation_with_character_is_incestuous_in_my_or_lieges_faith_trigger = { CHARACTER = scope:owner } } + scope:target = { relation_with_character_is_sodomy_in_my_or_lieges_faith_trigger = { CHARACTER = scope:owner } } + } +} \ No newline at end of file diff --git a/common/scripted_triggers/00_courtier_guest_management_triggers.txt b/common/scripted_triggers/00_courtier_guest_management_triggers.txt new file mode 100644 index 00000000..07ea702b --- /dev/null +++ b/common/scripted_triggers/00_courtier_guest_management_triggers.txt @@ -0,0 +1,829 @@ +###TRIGGER LIST### + +#GUEST/COURTIER LEAVING/ARRIVING TRIGGERS: +#any_child_not_in_traveling_family_trigger +#any_consort_not_in_traveling_family_trigger +#courtier_allowed_to_leave_trigger +#guest_allowed_to_leave_trigger +#guest_allowed_to_arrive_trigger + +#GUEST/COURTIER USEFULNESS: +#courtier_or_guest_claim_trigger +#useful_courtier_or_guest_claim_trigger +#has_useful_potential_spouse_claim_trigger +#guest_knight_candidate_trigger +#guest_commander_candidate_trigger +#guest_vassal_candidate_trigger +#guest_physician_candidate_trigger +#guest_male_female_balance_trigger +#child_available_for_guest_marriage_trigger +#guest_marriage_candidate_trigger + +#POOL CHARACTER TRIGGERS: +#pool_character_is_pruneable_trigger + + +####GUEST/COURTIER LEAVING/ARRIVING TRIGGERS### +same_location_and_court_status_as = { # Same location and both are in court / are guests / are pool characters + exists = location + exists = $CHARACTER$.location + location = $CHARACTER$.location + OR = { + is_in_the_same_court_as = $CHARACTER$ + trigger_if = { + limit = { $CHARACTER$ = { is_pool_guest = yes } } + is_pool_guest = yes + } + trigger_if = { + limit = { $CHARACTER$ = { is_pool_character = yes } } + is_pool_character = yes + } + } + +} + +any_child_not_in_traveling_family_trigger = { + save_temporary_scope_as = traveler + exists = location + any_child = { + is_adult = no + same_location_and_court_status_as = { CHARACTER = scope:traveler } + save_temporary_scope_as = checking_child + scope:traveler = { + NOT = { + any_traveling_family_member = { this = scope:checking_child } + } + } + } +} + +any_consort_not_in_traveling_family_trigger = { + save_temporary_scope_as = traveler + exists = location + any_spouse = { + exists = location + same_location_and_court_status_as = { CHARACTER = scope:traveler } + save_temporary_scope_as = checking_consort + scope:traveler = { + NOT = { + any_traveling_family_member = { this = scope:checking_consort } + } + } + } +} + + +courtier_allowed_to_leave_trigger = { + save_temporary_scope_as = leaving_courtier + NOR = { + # Not blocked by script + has_character_flag = blocked_from_leaving + is_councillor_of = scope:liege + is_consort_of = scope:liege + scope:liege = { + player_heir_position = { + target = scope:leaving_courtier + value <= 2 #Not 1st, 2nd or 3rd player heir (0,1,2) + } + } + has_any_court_position = yes + has_relation_lover = scope:liege + is_knight_of = scope:liege + is_tax_collector_of = scope:liege + any_relation = { + type = ward + OR = { + this = scope:liege + AND = { + is_courtier_of = scope:liege + OR = { + NOT = { any_close_family_member = { this = scope:leaving_courtier } } + any_close_family_member = { this = scope:liege } + } + } + } + } + any_relation = { + type = guardian + OR = { + this = scope:liege + AND = { + is_courtier_of = scope:liege + OR = { + NOT = { any_close_family_member = { this = scope:leaving_courtier } } + any_close_family_member = { this = scope:liege } + } + } + } + } + any_relation = { + type = mentor + OR = { + this = scope:liege + AND = { + is_courtier_of = scope:liege + OR = { + NOT = { any_close_family_member = { this = scope:leaving_courtier } } + any_close_family_member = { this = scope:liege } + } + } + } + } + any_relation = { + type = student + OR = { + this = scope:liege + AND = { + is_courtier_of = scope:liege + OR = { + NOT = { any_close_family_member = { this = scope:leaving_courtier } } + any_close_family_member = { this = scope:liege } + } + } + } + } + has_epidemic_disease_trigger = yes + #Keep daughters/sons for marriages + AND = { + OR = { + is_child_of = scope:liege + is_grandchild_of = scope:liege + is_great_grandchild_of = scope:liege + } + NOT = { has_trait = bastard } + trigger_if = { #Daughters + limit = { is_female = yes } + scope:liege = { + OR = { + has_realm_law = male_only_law + has_realm_law = male_preference_law + } + } + } + trigger_else = { #Sons + scope:liege = { + OR = { + has_realm_law = female_only_law + has_realm_law = female_preference_law + } + } + } + } + #No children of liege can leave court while children + AND = { + OR = { + is_child_of = scope:liege + is_grandchild_of = scope:liege + is_great_grandchild_of = scope:liege + } + is_adult = no + } + #Claimant won't leave while claim is pressed... + scope:liege = { pressing_claim_of_character_trigger = { CHARACTER = scope:leaving_courtier } } + #Would be leaving without a child or consort + any_child_not_in_traveling_family_trigger = yes + any_consort_not_in_traveling_family_trigger = yes + #...Or while they have a promise for a claim getting pressed + has_character_flag = courtier_staying_for_claim + + #...Or if they're involved in an ongoing event + has_variable = stewardship_duty_1062_employer + + #...Or if someone is trying to elope with them + any_targeting_scheme = { + scheme_type = elope + } + + #Non-dominant spouses don't wander off + AND = { + is_married = yes + any_spouse = { + OR = { + AND = { + exists = liege + liege = scope:leaving_courtier.liege + } + AND = { + exists = host + exists = scope:leaving_courtier.host + liege = scope:leaving_courtier.host + } + is_in_the_same_court_as = scope:leaving_courtier + } + } + trigger_if = { + limit = { is_female = yes } + scope:liege = { + OR = { + has_realm_law = male_only_law + has_realm_law = male_preference_law + } + } + } + trigger_else = { + scope:liege = { + OR = { + has_realm_law = female_only_law + has_realm_law = female_preference_law + } + } + } + } + + # Diarchs don't leave their court. + is_diarch = yes + is_designated_diarch = yes + + #Shieldmaidens stay till dismissed. + has_trait = shieldmaiden + + # Children taught a lesson won't leave + has_character_modifier = mellowed_spirit + + # Courtiers with sponsored inspirations won't leave on their own. + AND = { + exists = inspiration + inspiration = { exists = inspiration_sponsor } + } + + scope:liege = { government_has_flag = government_is_landless_adventurer } + is_obedient_to = scope:liege + } +} + + +guest_allowed_to_leave_trigger = { + NOR = { + # Not blocked by script + has_character_flag = blocked_from_leaving + #Agent in a local scheme + scope:host = { + any_courtier = { + any_targeting_scheme = { + any_scheme_agent_character = { + this = scope:guest + } + } + } + } + scope:host = { + any_targeting_scheme = { + any_scheme_agent_character = { + this = scope:guest + } + } + } + any_child = { # No child can be a known child of the host + is_adult = no + any_parent = { this = scope:host } + } + # Diarchs don't leave their court. + is_diarch = yes + is_designated_diarch = yes + #Too sick to travel + has_epidemic_disease_trigger = yes + #Would be leaving without spouse or underage child + any_child_not_in_traveling_family_trigger = yes + any_consort_not_in_traveling_family_trigger = yes + #Is waiting for inspiration funding + exists = inspiration + } +} + +guest_allowed_to_arrive_trigger = { + trigger_if = { + limit = { exists = var:last_visited_ruler } + NOT = { var:last_visited_ruler = $HOST$ } + } + trigger_if = { # Make sure that they're not trying to go back to where they are right now + limit = { exists = host } + NOT = { host = $HOST$ } + } + has_epidemic_disease_trigger = no + NOT = { has_relation_rival = $HOST$ } + #Compatible faiths + faith = { + save_temporary_scope_as = potential_guest_faith + faith_hostility_level = { + target = $HOST$.faith + value < faith_evil_level + } + } + $HOST$.faith = { + faith_hostility_level = { + target = scope:potential_guest_faith + value < faith_evil_level + } + } + + #Isn't too good for host + NAND = { + OR = { + any_claim = { tier = tier_empire } + any_close_family_member = { highest_held_title_tier = tier_empire } + } + $HOST$ = { highest_held_title_tier <= tier_county } + } +} #Note: this trigger used to contain opinion triggers but then some awful rulers could never get guests because everyone hates them + + +#This is a localized trigger for checking that a character do not have a spouse that's employed or has some other circumstance blocking them from being recruited to a court +can_recruit_character_to_court_trigger = { + $RECRUITER$ = { save_temporary_scope_as = recruiter } + $RECRUITEE$ = { save_temporary_scope_as = recruitee } + scope:recruitee = { + bp2_valid_for_standard_interactions_trigger = yes + NOR = { + custom_description = { + text = is_not_wandering_child + subject = scope:recruitee + AND = { + is_adult = no + NOT = { is_close_or_extended_family_of = scope:recruiter } + } + } + is_imprisoned = yes + is_theocratic_lessee = yes + is_diarch = yes + trigger_if = { + limit = { + exists = host + NOT = { is_player_heir_of = scope:recruiter } + } + is_player_heir_of = host + } + trigger_if = { + limit = { exists = host } + is_consort_of = host + } + trigger_if = { + limit = { exists = host } + host = { + pressing_claim_of_character_trigger = { CHARACTER = scope:recruitee } + } + } + trigger_if = { + limit = { exists = host } + #Are they employed? + is_councillor_of = scope:recruitee.host + is_knight_of = scope:recruitee.host + any_relation = { + type = ward + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + any_relation = { + type = guardian + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + any_relation = { + type = mentor + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + any_relation = { + type = student + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + any_court_position_employer = { this = scope:recruitee.host } + } + trigger_if = { + limit = { + scope:recruiter = { is_landless_adventurer = yes } + } + custom_tooltip = { + text = can_recruit_character_to_court_trigger.tt.laamps_invitation_restrictions + NOR = { + is_player_heir_of = scope:recruiter + has_relation_soulmate = scope:recruiter + has_relation_best_friend = scope:recruiter + is_consort_of = scope:recruiter + AND = { + is_pool_character = yes + OR = { + has_relation_friend = scope:recruiter + has_relation_lover = scope:recruiter + is_close_family_of = scope:recruiter + } + } + } + } + } + + #Do they have the "wrong" marriage type and the spouse is employed? + custom_description = { + text = is_married_matrilineally_and_spouse_is_dominant_partner + subject = scope:recruitee + any_spouse = { + is_female = yes + matrilinear_marriage = yes + exists = host + host = scope:recruitee.host + save_temporary_scope_as = spouse + OR = { #Is employed in some way + is_councillor_of = scope:recruitee.host + is_knight_of = scope:recruitee.host + any_relation = { + type = ward + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + any_relation = { + type = guardian + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + any_relation = { + type = mentor + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + any_relation = { + type = student + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + scope:spouse = { + any_court_position_employer = { this = scope:recruitee.host } + } + } + } + } + custom_description = { + text = is_married_patrilineally_and_spouse_is_dominant_partner + subject = scope:recruitee + any_spouse = { + is_male = yes + patrilinear_marriage = yes + exists = host + host = scope:recruitee.host + save_temporary_scope_as = spouse + OR = { #Is employed in some way + is_councillor_of = scope:recruitee.host + is_knight_of = scope:recruitee.host + any_relation = { + type = ward + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + any_relation = { + type = guardian + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + any_relation = { + type = mentor + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + any_relation = { + type = student + OR = { + this = scope:recruitee.host + is_close_family_of = scope:recruitee.host + } + } + scope:spouse = { + any_court_position_employer = { this = scope:recruitee.host } + } + } + } + } + custom_description = { + text = "is_escaped_prisoner" + subject = scope:recruitee + OR = { + has_opinion_modifier = { + modifier = attempted_imprisonment_opinion + target = scope:recruiter + } + has_opinion_modifier = { + modifier = treasonous_imprison_refusal + target = scope:recruiter + } + AND = { + exists = var:escaped_imprisonment_from + var:escaped_imprisonment_from = scope:recruiter + } + } + } + } + } +} + + +###GUEST/COURTIER USEFULNESS TRIGGERS### +courtier_or_guest_claim_trigger = { + exists = holder + NOT = { + holder = { + OR = { + this = $RULER$ + target_is_liege_or_above = $RULER$ + } + } + } +} + +useful_courtier_or_guest_claim_trigger = { + courtier_or_guest_claim_trigger = { RULER = $RULER$ } + tier < $RULER$.highest_held_title_tier + $RULER$ = { is_landed = yes } + OR = { #For distance check + exists = title_province + exists = holder.capital_province + } + #The higher tier the ruler has, the longer distance is acceptable + #We prefer to measure against the title's province, but if there is none, check its holder + trigger_if = { + limit = { $RULER$ = { highest_held_title_tier = tier_empire } } + trigger_if = { + limit = { exists = title_province } + title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_almost_massive } } + } + trigger_else = { + holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_almost_massive } } + } + } + trigger_else_if = { + limit = { $RULER$ = { highest_held_title_tier = tier_kingdom } } + trigger_if = { + limit = { exists = title_province } + title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_huge } } + } + trigger_else = { + holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_huge } } + } + } + trigger_else_if = { + limit = { $RULER$ = { highest_held_title_tier = tier_duchy } } + trigger_if = { + limit = { exists = title_province } + title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_large } } + } + trigger_else = { + holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_large } } + } + } + trigger_else = { + trigger_if = { + limit = { exists = title_province } + title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_medium } } + } + trigger_else = { + holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_medium } } + } + } +} + +neighboring_useful_courtier_or_guest_claim_trigger = { + courtier_or_guest_claim_trigger = { RULER = $RULER$ } + tier < $RULER$.highest_held_title_tier + exists = $RULER$.capital_province + holder = { + any_sub_realm_county = { + is_neighbor_to_realm = $RULER$ + } + } +} + +has_useful_potential_spouse_claim_trigger = { + any_claim = { + pressed = yes + exists = holder + NOT = { + holder = { + OR = { + this = $RULER$ + target_is_liege_or_above = $RULER$ + } + } + } + } +} + +guest_knight_candidate_trigger = { + can_be_knight_trigger = { ARMY_OWNER = $HOST$ } + age < 60 + age >= 25 + prowess > medium_skill_rating +} + +guest_commander_candidate_trigger = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $HOST$ } + age < 60 + age >= 25 + martial > medium_skill_rating +} + +guest_vassal_candidate_good_traits_trigger = { + OR = { #Gives +opinion of liege + has_trait = content + has_trait = trusting + has_trait = humble + } +} + +guest_vassal_candidate_bad_traits_trigger = { + OR = { #Gives -opinion of liege + has_trait = ambitious + has_trait = arrogant + has_trait = impatient + } +} + +guest_vassal_candidate_trigger = { + age < 60 + faith = scope:host.faith + culture = scope:host.culture + faith = { + has_dominant_ruling_gender = prev + } + guest_vassal_candidate_bad_traits_trigger = no + save_temporary_scope_as = vassal_candidate + is_eunuch_trigger = no + NOR = { #So they don't leave your realm through inheritance + any_heir_title = { + scope:guest = { is_primary_heir_of = scope:vassal_candidate } + } + any_child = { is_playable_character = yes } + has_trait = devoted + has_trait = order_member + } +} + +guest_physician_candidate_trigger = { + age < 70 + learning >= decent_skill_rating +} + +guest_male_female_balance_trigger = { #are you interesting enough to get "upbalanced" to make up for lack of available positions due to your gender? + is_adult = yes + age <= 65 + is_lowborn = no +} + +child_available_for_guest_marriage_trigger = { + is_married = no + is_betrothed = no + age >= 10 + OR = { + is_vassal_of = scope:host + is_courtier_of = scope:host + } +} + +guest_marriage_candidate_trigger = { + save_temporary_scope_as = marriage_candidate + OR = { + is_male = yes + age <= 40 + } + OR = { + AND = { + is_married = no + can_marry_character_trigger = { CHARACTER = scope:host } + } + scope:host = { + any_child = { + child_available_for_guest_marriage_trigger = yes + can_marry_character_trigger = { CHARACTER = scope:marriage_candidate } + } + } + } +} + +###POOL TRIGGERS### +is_visitable_relation_trigger = { + exists = capital_province + capital_province = { local_pool_is_full_trigger = no } + NOR = { + this = $CHARACTER$.host + has_relation_rival = $CHARACTER$ + } + $CHARACTER$ = { + NAND = { + exists = var:last_visited_ruler + var:last_visited_ruler = prev + } + } +} + + +########################### +# POOL CHARACTER TRIGGERS # +########################### + +pool_character_is_pruneable_trigger = { + save_temporary_scope_as = pool_prune_check + is_adult = yes + NOR = { + has_trait = peasant_leader + has_trait = gallowsbait + has_trait = heresiarch + has_trait = populist_leader + has_trait = adventurer_follower + has_trait = adventurer + has_trait = historical_character + has_character_flag = ai_will_not_convert + is_married = yes + any_claim = { always = yes } + any_child = { is_adult = no } + num_of_good_genetic_traits >= 1 + any_relation = { + type = lover + is_ruler = yes + } + any_relation = { + type = friend + is_ruler = yes + } + any_close_or_extended_family_member = { is_ruler = yes } + AND = { #Belongs to a dynasty with more than 1 member + exists = dynasty + dynasty = { any_dynasty_member = { NOT = { this = scope:pool_prune_check } } } + } + any_relation = { + type = rival + is_ai = no + } + has_character_flag = easteregg + } + trigger_if = { + limit = { + is_lowborn = no + } + NOR = { + diplomacy >= high_skill_rating + martial >= high_skill_rating + stewardship >= high_skill_rating + intrigue >= high_skill_rating + learning >= high_skill_rating + prowess >= high_skill_rating + any_relation = { + type = rival + is_ruler = yes + } + culture = { + has_cultural_tradition = tradition_diasporic + } + } + } +} + + +local_pool_is_full_trigger = { + number_of_characters_in_pool >= full_pool_size +} + +guest_poet_candidate_trigger = { + age < 80 + age >= 16 + diplomacy > medium_skill_rating +} + +is_courtier_or_knight_of_root = { + OR = { + is_courtier_of = root + is_knight_of = root + } +} + +guest_herder_candidate_trigger = { + government_has_flag = government_is_herder + has_trait = lifestyle_seasoned_pastor + trigger_if = { + limit = { root.faith = { has_doctrine = doctrine_gender_male_dominated } } + is_male = yes + } + trigger_if = { + limit = { root.faith = { has_doctrine = doctrine_gender_female_dominated } } + is_female = yes + } + age < 45 + age >= 25 +} \ No newline at end of file diff --git a/common/scripted_triggers/00_crime_triggers.txt b/common/scripted_triggers/00_crime_triggers.txt new file mode 100644 index 00000000..84c717cd --- /dev/null +++ b/common/scripted_triggers/00_crime_triggers.txt @@ -0,0 +1,68 @@ +#is_witch_trigger +#is_deviant_trigger + + + +is_witch_trigger = { + custom_description = { + text = is_a_witch + subject = this + OR = { + has_trait = witch + any_secret = { secret_type = secret_witch } + } + } +} + +is_witch_known_by_trigger = { + OR = { + has_trait = witch + custom_description = { + text = has_a_witch_secret_known_by_character + subject = this + object = $CHARACTER$ + any_secret = { + secret_type = secret_witch + is_known_by = $CHARACTER$ + } + } + } +} + +is_deviant_trigger = { + OR = { + has_trait = deviant + any_secret = { secret_type = secret_deviant } + } +} + +is_incestuous_trigger = { + OR = { + has_trait = incestuous + any_secret = { + secret_type = secret_incest + } + } +} + +sexual_activity_with_partner_is_criminal_in_faith_trigger = { + save_temporary_scope_as = sexual_legality_check + OR = { + #Incest (currently never illegal so commented out) + #AND = { + # relation_with_character_is_incestuous_in_faith_trigger = { CHARACTER = $PARTNER$ FAITH = $FAITH$ } + # trait_is_criminal_in_faith_trigger = { TRAIT = incestuous FAITH = $FAITH$ GENDER_CHARACTER = scope:sexual_legality_check } } + #} + #Sodomy + AND = { + relation_with_character_is_sodomy_in_faith_trigger = { CHARACTER = $PARTNER$ FAITH = $FAITH$ } + trait_is_criminal_in_faith_trigger = { TRAIT = sodomite FAITH = $FAITH$ GENDER_CHARACTER = scope:sexual_legality_check } + } + #Adultery/fornication + AND = { + NOT = { is_consort_of = $PARTNER$ } + trait_is_criminal_in_faith_trigger = { TRAIT = fornicator FAITH = $FAITH$ GENDER_CHARACTER = scope:sexual_legality_check } + } + } +} + diff --git a/common/scripted_triggers/00_crypto_religionist_triggers.txt b/common/scripted_triggers/00_crypto_religionist_triggers.txt new file mode 100644 index 00000000..286b8725 --- /dev/null +++ b/common/scripted_triggers/00_crypto_religionist_triggers.txt @@ -0,0 +1,16 @@ +knows_about_character_being_same_crypto_religionist_trigger = { + exists = secret_faith + $CHARACTER$ = { exists = secret_faith } + secret_faith = $CHARACTER$.secret_faith + any_known_secret = { + secret_owner = $CHARACTER$ + secret_type = secret_crypto_religionist + } +} + +has_crypto_religionist_secret_known_by_character_trigger = { + any_secret = { + secret_type = secret_crypto_religionist + any_secret_knower = { this = $CHARACTER$ } + } +} \ No newline at end of file diff --git a/common/scripted_triggers/00_cultural_heritage_triggers.txt b/common/scripted_triggers/00_cultural_heritage_triggers.txt new file mode 100644 index 00000000..c0c11d64 --- /dev/null +++ b/common/scripted_triggers/00_cultural_heritage_triggers.txt @@ -0,0 +1,185 @@ + +### Cultural heritage triggers +# By their nature these triggers will be a bit lose and inaccurate, so keep that in mind when using them! + + +#ASIA +culture_has_asian_heritage_pillar_trigger = { + OR = { + culture_has_east_asian_heritage_pillar_trigger = yes + culture_has_west_asian_heritage_pillar_trigger = yes + culture_has_south_asian_heritage_pillar_trigger = yes + culture_has_north_asian_heritage_pillar_trigger = yes + culture_has_central_asian_heritage_pillar_trigger = yes + } +} +culture_has_east_asian_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_tibetan + has_cultural_pillar = heritage_chinese + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_burman + has_cultural_pillar = heritage_qiangic + } + } +} +culture_has_west_asian_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_iranian + has_cultural_pillar = heritage_turkic + } + } +} +culture_has_south_asian_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_indo_aryan + has_cultural_pillar = heritage_dravidian + has_cultural_pillar = heritage_burman + has_cultural_pillar = heritage_qiangic + } + } +} +culture_has_north_asian_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_ugro_permian + } + } +} +culture_has_central_asian_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_qiangic + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_mongolic + } + } +} + +#AFRICA +culture_has_african_heritage_pillar_trigger = { + OR = { + culture_has_west_african_heritage_pillar_trigger = yes + culture_has_east_african_heritage_pillar_trigger = yes + culture_has_north_african_heritage_pillar_trigger = yes + culture_has_central_african_heritage_pillar_trigger = yes + } +} +culture_has_west_african_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_akan + has_cultural_pillar = heritage_yoruba + has_cultural_pillar = heritage_west_african + has_cultural_pillar = heritage_senegambian + has_cultural_pillar = heritage_sahelian + has_cultural_pillar = heritage_akan + } + } +} +culture_has_east_african_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_somalian + has_cultural_pillar = heritage_east_african + } + } +} +culture_has_north_african_heritage_pillar_trigger = { + culture = { + has_cultural_pillar = heritage_berber + } +} +culture_has_central_african_heritage_pillar_trigger = { + culture = { + has_cultural_pillar = heritage_central_african + } +} + +#MENA +culture_has_mena_heritage_pillar_trigger = { + OR = { + culture = { has_cultural_pillar = heritage_arabic } + culture = { has_cultural_pillar = heritage_syriac } + culture_has_north_african_heritage_pillar_trigger = yes + } +} + +#EUROPE +culture_has_european_heritage_pillar_trigger = { + OR = { + culture_has_west_european_heritage_pillar_trigger = yes + culture_has_east_european_heritage_pillar_trigger = yes + culture_has_north_european_heritage_pillar_trigger = yes + culture_has_south_european_heritage_pillar_trigger = yes + culture_has_central_european_heritage_pillar_trigger = yes + } +} +culture_has_west_european_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_goidelic + has_cultural_pillar = heritage_west_germanic + has_cultural_pillar = heritage_brythonic + has_cultural_pillar = heritage_israelite + } + } +} +culture_has_east_european_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_volga_finnic + has_cultural_pillar = heritage_east_slavic + has_cultural_pillar = heritage_baltic + has_cultural_pillar = heritage_caucasian + } + } +} +culture_has_north_european_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_balto_finnic + has_cultural_pillar = heritage_north_germanic + has_cultural_pillar = heritage_ugro_permian + } + } +} +culture_has_south_european_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_iberian + has_cultural_pillar = heritage_latin + has_cultural_pillar = heritage_byzantine + has_cultural_pillar = heritage_south_slavic + has_cultural_pillar = heritage_israelite + } + } +} +culture_has_central_european_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_magyar + has_cultural_pillar = heritage_west_slavic + has_cultural_pillar = heritage_central_germanic + has_cultural_pillar = heritage_frankish + has_cultural_pillar = heritage_israelite + has_cultural_pillar = heritage_israelite + } + } +} +culture_has_slavic_heritage_pillar_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_south_slavic + has_cultural_pillar = heritage_east_slavic + has_cultural_pillar = heritage_west_slavic + } + } +} diff --git a/common/scripted_triggers/00_cultural_triggers.txt b/common/scripted_triggers/00_cultural_triggers.txt new file mode 100644 index 00000000..5805b07c --- /dev/null +++ b/common/scripted_triggers/00_cultural_triggers.txt @@ -0,0 +1,586 @@ + +### Cultural trigger list + +# drinks_alcohol_trigger - Would this person drink alcohol? +# holder_or_above_is_player_of_culture - Is this county's holder or anyone above them in the de facto hierarchy a player with the same culture? + + +###################### +# Cultural triggers # +###################### + +drinks_alcohol_trigger = { + is_adult = yes + custom_tooltip = { + text = drinks_alcohol + OR = { + has_trait = drunkard + faith_forbids_alcohol_trigger = no + } + } +} + +faith_forbids_alcohol_trigger = { + OR = { + religion = religion:islam_religion # Prohibited by khamr, a prohibition against intoxicants + religion = religion:jainism_religion # Prohibited along with the consumption of any fermented food + AND = { + has_trait = zealous + religion = religion:buddhism_religion # Discouraged as it disrupts progress along the eightfold path + } + } +} + +# If you need to check if a county drinks alcohol. +faith_only_forbids_alcohol_trigger = { + OR = { + religion = religion:islam_religion # Prohibited by khamr, a prohibition against intoxicants + religion = religion:jainism_religion # Prohibited along with the consumption of any fermented food + religion = religion:buddhism_religion # Discouraged as it disrupts progress along the eightfold path + } +} + +holder_or_above_is_player_of_culture = { + culture = { + save_temporary_scope_as = this_culture + } + OR = { + holder = { + AND = { + is_ai = no + culture = scope:this_culture + } + any_liege_or_above = { + is_ai = no + culture = scope:this_culture + } + } + } +} + +culture_in_winter_geographical_region_trigger = { + custom_description = { + text = culture_in_winter_geographical_region_trigger_desc + any_culture_county = { + any_county_province = { + OR = { + geographical_region = world_europe_north + geographical_region = world_europe_west + geographical_region = world_europe_east + geographical_region = world_steppe + geographical_region = world_tibet + } + } + } + } +} + +culture_in_non_sedentary_geographical_region_trigger = { + custom_description = { + text = culture_in_non_sedentary_geographical_region_trigger_desc + any_culture_county = { + any_county_province = { + OR = { + geographical_region = world_steppe + } + } + } + } +} + +culture_not_pacifistic_trigger = { + custom_description = { + text = culture_not_pacifist_trigger_desc + NOT = { + culture_tradition:tradition_pacifism = { is_in_list = traits } + } + } +} + +culture_not_warlike_trigger = { + custom_description = { + text = culture_not_warlike_trigger_desc + NOR = { + culture_tradition:tradition_winter_warriors = { is_in_list = traits } + culture_tradition:tradition_forest_fighters = { is_in_list = traits } + culture_tradition:tradition_mountaineers = { is_in_list = traits } + culture_tradition:tradition_warriors_of_the_dry = { is_in_list = traits } + culture_tradition:tradition_highland_warriors = { is_in_list = traits } + culture_tradition:tradition_jungle_warriors = { is_in_list = traits } + culture_tradition:tradition_quarrelsome = { is_in_list = traits } + culture_tradition:tradition_malleable_invaders = { is_in_list = traits } + culture_tradition:tradition_hunters = { is_in_list = traits } + culture_tradition:tradition_warrior_culture = { is_in_list = traits } + culture_tradition:tradition_martial_admiration = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_winter_warriors_desc + NOT = { + culture_tradition:tradition_winter_warriors = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_forest_fighter_desc + NOT = { + culture_tradition:tradition_forest_fighters = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_mountaineers_desc + NOT = { + culture_tradition:tradition_mountaineers = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_warriors_of_the_dry_desc + NOT = { + culture_tradition:tradition_warriors_of_the_dry = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_highland_warriors_desc + NOT = { + culture_tradition:tradition_highland_warriors = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_jungle_warriors_desc + NOT = { + culture_tradition:tradition_jungle_warriors = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_quarrelsome_desc + NOT = { + culture_tradition:tradition_quarrelsome = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_malleable_invaders_desc + NOT = { + culture_tradition:tradition_malleable_invaders = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_hunters_desc + NOT = { + culture_tradition:tradition_hunters = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_warrior_culture_desc + NOT = { + culture_tradition:tradition_warrior_culture = { is_in_list = traits } + } + } + custom_description = { + text = culture_has_martial_admiration_desc + NOT = { + culture_tradition:tradition_martial_admiration = { is_in_list = traits } + } + } +} + +should_have_same_faith_succession_trigger = { + culture = { + has_cultural_parameter = same_faith_inheritance_only + } + NOR = { + government_has_flag = government_is_theocracy # Handled separately + government_has_flag = government_is_holy_order # Handled separately + government_has_flag = government_is_mercenary # Irrelevant + } +} + +not_tribal_raid_trigger = { + culture = { + has_cultural_parameter = not_tribal_raiding_malus + } + NOT = { government_has_flag = government_is_tribal } +} + +culture_is_not_historical_hybrid_trigger = { + #Used to tell if a hybrid culture is one of the historical hybrids or not, mainly in checks for AI hybridization checks related to game rules. + #Expects to be used in culture scope + NOR = { + this = culture:norman + this = culture:maghrebi + this = culture:gaelic + this = culture:anglo_saxon + this = culture:scottish + this = culture:andalusian + this = culture:catalan + this = culture:english + this = culture:sicilian + this = culture:cisalpine + } +} + +# Cultural MAA triggers - Used in various places for triggers, AI weights, etc. +culture_has_skirmisher_maa = { + OR = { + has_cultural_parameter = unlock_maa_horn_warrior + has_cultural_parameter = unlock_maa_shomer + has_cultural_parameter = unlock_maa_abudrar + has_cultural_parameter = unlock_maa_guinea_warrior + has_innovation = innovation_adaptive_militia #Goedendag - Later Era MAA + has_cultural_parameter = unlock_maa_akritai + } +} + +culture_has_archer_maa = { + OR = { + has_cultural_parameter = unlock_maa_archers_of_the_nile + has_cultural_parameter = unlock_maa_bush_hunter + has_cultural_parameter = unlock_maa_metsanvartija + has_cultural_parameter = unlock_maa_maturkan_warriors + has_cultural_parameter = unlock_maa_longbowmen + has_innovation = innovation_repeating_crossbow #Chu-ko-nu Archers + has_innovation = innovation_bamboo_bows #Paiks + } +} + +culture_has_heavy_infantry_maa = { + OR = { + has_cultural_parameter = unlock_maa_ayyar + has_cultural_parameter = unlock_maa_mubarizun + has_cultural_parameter = unlock_maa_druzhina + has_cultural_parameter = unlock_maa_khandayat + has_cultural_parameter = unlock_maa_garudas + has_cultural_parameter = unlock_maa_palace_guards + has_cultural_parameter = unlock_maa_huscarls + has_cultural_parameter = unlock_maa_mountaineer + has_cultural_parameter = unlock_maa_zbrojnosh + has_innovation = innovation_sarawit #Sarawit - Later Era MAA + has_innovation = innovation_legionnaires #Praetorian + has_cultural_parameter = unlock_maa_varangian_guards + } +} + +culture_has_pikemen_maa = { #I.e. Spearmen + OR = { + has_cultural_parameter = unlock_maa_zupin_warrior + has_innovation = innovation_rectilinear_schiltron #Schiltron - Later Era MAA + has_innovation = innovation_pike_columns #Picchieri - Later Era MAA + has_innovation = innovation_zweihanders #Later Era MAA + has_cultural_parameter = unlock_maa_skoutatoi + } +} + +culture_has_light_cavalry_maa = { + OR = { + has_cultural_parameter = unlock_maa_mulaththamun + has_cultural_parameter = unlock_maa_hussar #Konni + has_cultural_parameter = unlock_maa_tawashi #Tawashi + has_cultural_parameter = unlock_maa_ayrudzi + has_innovation = innovation_desert_tactics #Chasseur + has_innovation = innovation_caballeros #Caballero + has_innovation = innovation_hobbies #Hobelar + has_innovation = innovation_sahel_horsemen #Sahel Horsemen + } +} + +culture_has_heavy_cavalry_maa = { + OR = { + has_cultural_parameter = unlock_maa_cataphract + has_cultural_parameter = unlock_maa_monaspa + has_cultural_parameter = unlock_maa_tarkhan + has_cultural_parameter = unlock_maa_conrois + has_cultural_parameter = unlock_maa_cataphract_archers + has_innovation = innovation_valets #Gendarme - Later Era MAA + } +} + +culture_has_archer_cavalry_maa = { + OR = { + has_cultural_parameter = unlock_maa_horse_archers + has_cultural_parameter = unlock_maa_mangudai + culture_head ?= { + mpo_can_recruit_nomad_maa_trigger = yes + } + any_player = { + culture = prev + mpo_can_recruit_nomad_maa_trigger = yes + } + } +} + +#Culture specialized in maa type +culture_specializes_in_skirmisher_maa = { + OR = { + has_cultural_tradition = tradition_forest_folk + has_cultural_tradition = tradition_jungle_dwellers + has_cultural_tradition = tradition_polders + has_cultural_tradition = tradition_adaptive_skirmishing + has_cultural_tradition = tradition_hit_and_run + has_cultural_tradition = tradition_forest_wardens + has_cultural_tradition = tradition_hussar + has_cultural_tradition = tradition_fp3_pragmatic_creed + culture_has_skirmisher_maa = yes + } +} + +culture_specializes_in_archer_maa = { + OR = { + has_cultural_tradition = tradition_forest_folk + has_cultural_tradition = tradition_jungle_dwellers + has_cultural_tradition = tradition_adaptive_skirmishing + has_cultural_tradition = tradition_formation_fighting + culture_has_archer_maa = yes + } +} + +culture_specializes_in_heavy_infantry_maa = { + OR = { + has_cultural_tradition = tradition_roman_legacy + has_cultural_tradition = tradition_metal_craftsmanship + has_cultural_tradition = tradition_mountain_homes + has_cultural_tradition = tradition_stand_and_fight + has_cultural_tradition = tradition_mobile_guards + has_cultural_tradition = tradition_mountaineer_ruralism + culture_has_heavy_infantry_maa = yes + } +} + +culture_specializes_in_pikemen_maa = { + OR = { + has_cultural_tradition = tradition_mountaineer_ruralism + has_cultural_tradition = tradition_metal_craftsmanship + has_cultural_tradition = tradition_mountain_homes + has_cultural_tradition = tradition_formation_fighting + has_cultural_tradition = tradition_stand_and_fight + has_cultural_tradition = tradition_mobile_guards + culture_has_pikemen_maa = yes + } +} + +culture_specializes_in_light_cavalry_maa = { + OR = { + has_cultural_tradition = tradition_dryland_dwellers + has_cultural_tradition = tradition_pastoralists + has_cultural_tradition = tradition_hit_and_run + has_cultural_tradition = tradition_horse_breeder + has_cultural_tradition = tradition_saharan_nomads + culture_has_light_cavalry_maa = yes + } +} + +culture_specializes_in_heavy_cavalry_maa = { + OR = { + has_cultural_tradition = tradition_roman_legacy + has_cultural_tradition = tradition_mountain_homes + has_cultural_tradition = tradition_horse_breeder + has_cultural_tradition = tradition_stand_and_fight + has_cultural_tradition = tradition_mobile_guards + has_cultural_tradition = tradition_ep3_indomitable_azatani + has_cultural_tradition = tradition_mountaineer_ruralism + culture_has_heavy_cavalry_maa = yes + } +} + +culture_specializes_in_archer_cavalry_maa = { + OR = { + has_cultural_tradition = tradition_ep3_indomitable_azatani + has_cultural_tradition = tradition_horse_breeder + has_cultural_tradition = tradition_mpo_iron_cavalry + has_cultural_tradition = tradition_devoted_horsemanship + culture_has_archer_cavalry_maa = yes + } +} + +# Language trigger - Makes languages available when you diverge your culture +language_is_shown_trigger = { + scope:character = { + OR = { + AND = { + exists = var:legendary_culture + var:legendary_culture = { has_cultural_pillar = $LANGUAGE$ } + } + AND = { + # The target language needs to fulfill ALL of the following: + any_sub_realm_county = { # Language needs to be well-represented within your realm + percent >= 0.1 + culture = { has_cultural_pillar = $LANGUAGE$ } + } + any_sub_realm_county = { # Language needs to border your own culture + culture = { has_cultural_pillar = $LANGUAGE$ } + any_neighboring_county = { + culture = { this = scope:character.culture } + } + } + any_sub_realm_county = { # You need a minimum acceptance with any culture speaking the language + culture = { + has_cultural_pillar = $LANGUAGE$ + cultural_acceptance = { + target = scope:character.culture + value >= 25 + } + } + } + } + } + } +} + +# Language trigger - Makes heritages available when you diverge your culture +heritage_is_shown_trigger = { + scope:character = { + OR = { + AND = { + exists = var:legendary_culture + var:legendary_culture = { has_cultural_pillar = $HERITAGE$ } + } + culture = { has_cultural_pillar = $HERITAGE$ } + } + } +} + +# Checks if you could Hybridise with the culture without checking for acceptance +is_valid_for_hybridising_trigger = { + $CHARACTER$ = { + culture = { + NOT = { has_same_culture_heritage = $CULTURE$ } + culture_age >= culture_hybrid_cooldown + } + trigger_if = { + limit = { + NAND = { + exists = var:special_culture + var:special_culture = $CULTURE$ + } + } + custom_description = { + text = culture_present_in_realm_for_hybridization + any_sub_realm_county = { + culture = $CULTURE$ + } + } + } + custom_description = { + text = culture_is_not_parent_culture + culture = { + NOT = { + any_parent_culture = { + this = $CULTURE$ + } + } + } + } + custom_description = { + text = culture_is_not_child_culture + $CULTURE$ = { + NOT = { + any_parent_culture = { + this = $CHARACTER$.culture + } + } + } + } + } +} + +# Checks if you can currently hybridise with the culture +can_hybridize_culture_trigger = { + is_valid_for_hybridising_trigger = { + CHARACTER = $CHARACTER$ + CULTURE = $CULTURE$ + } + $CHARACTER$ = { + culture = { + cultural_acceptance = { target = $CULTURE$ value >= hybridization_threshold_value } + } + } +} + + +# Uses current scope and scope:culture +cultures_share_relevant_region_trigger = { + OR = { + AND = { + culture_overlaps_geographical_region = world_europe + scope:culture = { + culture_overlaps_geographical_region = world_europe + } + } + AND = { + culture_overlaps_geographical_region = world_asia_minor + scope:culture = { + culture_overlaps_geographical_region = world_asia_minor + } + } + AND = { + OR = { + culture_overlaps_geographical_region = world_middle_east + culture_overlaps_geographical_region = world_middle_east_persia + } + scope:culture = { + OR = { + culture_overlaps_geographical_region = world_middle_east + culture_overlaps_geographical_region = world_middle_east_persia + } + } + } + AND = { + culture_overlaps_geographical_region = world_steppe + scope:culture = { + culture_overlaps_geographical_region = world_steppe + } + } + AND = { + culture_overlaps_geographical_region = world_tibet + scope:culture = { + culture_overlaps_geographical_region = world_tibet + } + } + AND = { + OR = { + culture_overlaps_geographical_region = world_india + culture_overlaps_geographical_region = world_burma + } + scope:culture = { + OR = { + culture_overlaps_geographical_region = world_india + culture_overlaps_geographical_region = world_burma + } + } + } + AND = { + culture_overlaps_geographical_region = world_africa + scope:culture = { + culture_overlaps_geographical_region = world_africa + } + } + } +} + +is_vegetarian_trigger = { + OR = { + culture = { + has_cultural_parameter = cannot_hunt + } + faith_is_vegetarian_trigger = yes + } +} + +faith_is_vegetarian_trigger = { + faith = { + OR = { + religion = religion:buddhism_religion + religion = religion:jainism_religion + religion = religion:bon_religion + this = faith:mazdakism + this = faith:manichean + } + } +} + +culture_tradition_reduction_trigger = { + scope:character = { + has_variable_list = culture_tradition_reduction + is_target_in_variable_list = { + name = culture_tradition_reduction + target = culture_tradition:$TRADITION$ + } + } +} diff --git a/common/scripted_triggers/00_death_management_triggers.txt b/common/scripted_triggers/00_death_management_triggers.txt new file mode 100644 index 00000000..df68e601 --- /dev/null +++ b/common/scripted_triggers/00_death_management_triggers.txt @@ -0,0 +1,97 @@ +block_death_event_trigger = { + OR = { + trigger_if = { + limit = { exists = var:block_death_event_from } + var:block_death_event_from = $DEAD$ + #If we get timed variables in list: + # is_target_in_variable_list = { + # name = block_death_event_from + # target = $DEAD$ + # } + } + has_character_flag = sent_relevant_death_event + } +} + +had_gruesome_death_trigger = { #Used to check if a character's death was gruesome + OR = { + death_reason = death_physician_mistreatment + death_reason = death_murder + death_reason = death_ended_on_feast_table + death_reason = death_mysterious + death_reason = death_plotting + death_reason = death_script_cruelty + death_reason = death_punishment + death_reason = death_dungeon + death_reason = death_head_ripped_off + death_reason = death_cloven_in_half + death_reason = death_viciously_dismembered + death_reason = death_ripped_apart_limb_by_limb + death_reason = death_chopped_to_pieces + death_reason = death_heart_ripped_out + death_reason = death_fear + death_reason = death_skull_cracked_open + death_reason = death_strangled_with_own_intestines + death_reason = death_carp_accident + death_reason = death_whipping + death_reason = death_torture + death_reason = death_execution_blood_eagle + death_reason = death_execution_blot + death_reason = death_execution + death_reason = death_burned + death_reason = death_eaten + death_reason = death_beaten + death_reason = death_sacrificed_to_gods + death_reason = death_crucified + death_reason = death_burned_witch + death_reason = death_feast_accident + death_reason = death_fall + death_reason = death_poison + death_reason = death_crocodile + death_reason = death_dog_attack + death_reason = death_wolves + death_reason = death_bear + death_reason = death_ritually_hung_then_eaten + death_reason = death_ritually_hung + death_reason = death_ritually_eaten + death_reason = death_botched_decapitation + death_reason = death_decapitated + death_reason = death_kennel + death_reason = death_thrown_onto_chariot_track + death_reason = death_thrown_off_kathisma + death_reason = death_killed_while_attempting_murder + death_reason = death_chariot_race_trick + death_reason = death_snake + } +} + +death_killer_always_public_trigger = { + OR = { + # Executions + death_reason = death_crucified + death_reason = death_burned_witch + death_reason = death_torture + death_reason = death_execution_blood_eagle + death_reason = death_execution_blot + death_reason = death_execution + death_reason = death_dungeon + death_reason = death_ritually_hung_then_eaten + death_reason = death_ritually_hung + death_reason = death_ritually_eaten + death_reason = death_hostage_execution + death_reason = death_botched_decapitation + death_reason = death_decapitated + death_reason = death_sacrificed_to_gods + death_reason = death_eaten + death_reason = death_kennel + # Public Fights + death_reason = death_fight + death_reason = death_battle + death_reason = death_duel + death_reason = death_beaten + death_reason = death_killed_while_attempting_murder + # Accidents + death_reason = death_carp_accident + death_reason = death_feast_accident + } +} diff --git a/common/scripted_triggers/00_diarchy_scripted_triggers.txt b/common/scripted_triggers/00_diarchy_scripted_triggers.txt new file mode 100644 index 00000000..c0c7af25 --- /dev/null +++ b/common/scripted_triggers/00_diarchy_scripted_triggers.txt @@ -0,0 +1,870 @@ +############# +# Diarchy Scripted Triggers +############# + +################################################## +# General Triggers + +character_hates_scope_due_to_strife_guts_trigger = { + # We've got to share a direct liege for strife to be valid. + exists = liege + exists = $TARGET$.liege + liege = $TARGET$.liege + # And $TARGET$ must have accumulated enough strife to aggravate me (which we modulate up or down a little with some traits). + $TARGET$.strife_opinion >= strife_harm_threshold_value + # Finally, there has to be at least _some_ love lost. + opinion = { + target = $TARGET$ + value < 0 + } +} + +# This is hooked up to the is_diarch_valid rule, invalidating them if it returns false, referenced by Code. +is_diarch_valid_trigger = { + # Basics. + is_alive = yes + OR = { + # We always want adults... + is_adult = yes + # ... _unless_ this is junior emperor, they're always children. + liege ?= { has_diarchy_parameter = diarchy_type_is_junior_emperorship } + } + # Event blocks. + OR = { + is_ai = no + NOT = { has_character_flag = cannot_be_diarch } + } + trigger_if = { + limit = { + exists = liege + } + # Being in a diarchy yourself will disable you, outside of co-rulerships. + trigger_if = { + limit = { + NOT = { + liege = { has_diarchy_active_parameter = diarchy_is_co_rulership } + } + } + # If you're in an entrenched regency for some reason, you can't manage a regency yourself. + NOT = { has_diarchy_parameter = diarchy_type_is_entrenched_regency } + # You need to be mentally & physically sound, to some degree. + regency_for_personal_reasons_trigger = no + } + # Diarchy-specific checks. + ## Viziers. + trigger_if = { + limit = { + liege = { has_diarchy_parameter = diarchy_is_vizierate } + } + # Must match their liege's gender preference. + diarch_matches_liege_faith_gender_preference_trigger = yes + # Viziers aren't big land-owners. + ## Not in this way, at least. + highest_held_title_tier <= tier_barony + } + # If you have somehow managed to get invited to/start an activity outside of your realm (e.g., you're the spouse in a grand wedding), then yeah, you forfeit your position. + ## ... unless you're a co-ruler. + trigger_if = { + limit = { + NOT = { + liege = { has_diarchy_active_parameter = diarchy_is_co_rulership } + } + } + # We cannot be at war with our liege. + NOT = { is_at_war_with = liege } + NAND = { + # Is it redundant to check twice? + ## Yes. + ### Do the machine spirits demand this thoroughness of us? + #### Also yes. + ##### Do not ask why the God-Machine commands it, merely be glad that it commanded it of you. + is_travelling = yes + exists = current_travel_plan + # We check your liege so that you can attend business within the realm easily. + ## Schemes are their own special lil guys so we take care of them separately. + trigger_if = { + limit = { + exists = scope:owner + exists = scope:target + } + travel_would_cause_regency_trigger = { REALM_HOLDER = scope:owner.liege } + } + ## Else, we're an ordinary, gods-fearing root scope, so use that. + trigger_else = { + travel_would_cause_regency_trigger = { REALM_HOLDER = this.liege } + } + } + } + } +} + +# This is hooked up to the is_diarch_able rule, referenced by Code. +is_diarch_able_trigger = { + # You can't possibly manage someone else's realm from prison. + is_imprisoned = no + # You need to be mentally & physically sound, to some degree. + ## Mostly, this will invalidate, but it won't for co-rulerships so we just disable them here. + regency_for_personal_reasons_trigger = no + # You'd clearly be preoccupied. + trigger_if = { + limit = { exists = involved_activity } + save_temporary_scope_as = diarch_temp + involved_activity.activity_location.county.holder = { + NOR = { + this = scope:diarch_temp.liege + NOT = { + any_liege_or_above = { this = scope:diarch_temp.liege } + } + } + } + } + # If you're in a diarchy for any other reason, you need to chill. + NOT = { has_active_diarchy = yes } +} + +# And *this* needs to be added to guest activity intents to keep diarchs from showing up to the same parties as their liege. + bannable_serving_diarch_trigger = { + liege?= { NOT = { is_landless_adventurer = yes } } + OR = { + # Diarchs with official responsibilities can't come out to play. + is_diarch = yes + is_designated_diarch = yes + # Assumed diarchs don't get to either if they're the AI, as the player might be planning around them & the AI may have designated to avoid people after if it'd known they were going to welch. + ## Assumed-diarch players can make an intelligent choice on whether they want to go to events or not. + AND = { + is_ai = yes + is_diarchy_successor = yes + } + } +} + +diarch_has_situational_loyalty_trigger = { + diarch_loyalty > diarch_loyalty_visibly_disloyal_threshold + diarch_loyalty < diarch_loyalty_visibly_loyal_threshold +} + +diarch_callable_in_internal_war_trigger = { + OR = { + # CBs where the liege doesn't (necessarily) control an internal attacker. + using_cb = peasant_war + using_cb = populist_war + # All other internal CBs. + primary_attacker = { + any_liege_or_above = { this = scope:actor } + } + } +} + +diarch_matches_liege_faith_gender_preference_trigger = { + OR = { + # Female preference. + AND = { + is_female = yes + liege.faith = { has_doctrine = doctrine_gender_female_dominated } + } + # Male preference. + AND = { + is_male = yes + liege.faith = { has_doctrine = doctrine_gender_male_dominated } + } + # Equality. + liege.faith = { has_doctrine = doctrine_gender_equal } + } +} + +################################################## +# Setup Triggers + +basic_eligible_for_diarchy_trigger = { + is_landed_or_landless_administrative = yes + NOT = { government_has_flag = government_is_landless_adventurer } # Laamps don't use diarchs + highest_held_title_tier >= tier_county + NOT = { has_active_diarchy = yes } +} + +regency_for_personal_reasons_trigger = { + custom_tooltip = { + text = regency_for_personal_reasons_trigger.tt.cannot_govern_by_themselves + OR = { + AND = { + is_adult = no + NOT = { + liege = { has_diarchy_parameter = diarchy_type_is_junior_emperorship } + } + } + is_incapable = yes + has_character_modifier = isolating_modifier + } + } +} + +imprisonment_would_cause_regency_trigger = { + custom_tooltip = { + text = imprisonment_would_cause_regency_trigger.tt.imprisoned_abroad + is_imprisoned = yes + # Doesn't count if your gaoler is your vassal. + save_temporary_scope_as = liege_temp + NOT = { + any_vassal_or_below = { this = scope:liege_temp.imprisoner } + } + } +} + +travel_would_cause_regency_trigger = { + OR = { + # Travelling one-way. + AND = { + # Make sure that we _aren't_ going bilaterally. + NOT = { current_travel_plan.final_destination_province = current_travel_plan.departure_location } + # Then check that we're actually going outside of the realm. + current_travel_plan.final_destination_province.county.holder = { + NOR = { + any_liege_or_above = { this = $REALM_HOLDER$ } + this = $REALM_HOLDER$ + } + } + } + # Travelling in a circle. + AND = { + # Make sure that we _are_ going bilaterally. + current_travel_plan.final_destination_province = current_travel_plan.departure_location + # Check the next destination province instead. + ## We put a break in to check if there _is_ a county because you might be travelling through the ocean. + current_travel_plan.next_destination_province.county ?= { + holder = { + NOR = { + any_liege_or_above = { this = $REALM_HOLDER$ } + this = $REALM_HOLDER$ + } + } + } + } + } +} + +can_leave_diarchy_trigger = { + trigger_if = { + limit = { is_imprisoned = yes } + imprisonment_would_cause_regency_trigger = no + } + is_travelling = no + regency_for_personal_reasons_trigger = no +} + +regent_would_remain_loyal_after_death_trigger = { + is_ai = yes + diarch_loyalty_score_type_regency_value >= diarch_loyalty_visibly_loyal_threshold +} + +################################################## +# Character Interactions + +diarch_cannot_be_disabled_trigger = { + custom_description = { + text = diarch_interactions_tt_is_able + subject = $DIARCH$ + $DIARCH$ = { is_diarch_able_trigger = yes } + } +} + +diarch_legal_meddling_claimable_title_trigger = { + custom_description = { + text = "you_must_not_have_a_claim_on_the_title" + NOT = { + any_claimant = { this = $ACTOR$ } + } + } + custom_description = { + text = "character_interactions_not_rel_head_title" + is_head_of_faith = no + } + custom_tooltip = { + text = title_must_be_county_tier.tt + tier = tier_county + } + # This is mostly here to stop people from not claiming titles because they have valid titles that are _outside_ the sub-realm. + custom_tooltip = { + text = title_must_be_same_realm.tt + holder = { + any_liege_or_above = { this = $ACTOR$.liege } + } + } +} + +diarch_syphon_treasury_embezzlement_modifiers_trigger = { + OR = { + has_county_modifier = syphon_treasury_massive_sum_modifier + has_county_modifier = syphon_treasury_large_sum_modifier + has_county_modifier = syphon_treasury_medium_sum_modifier + has_county_modifier = syphon_treasury_small_sum_modifier + } +} + +diarch_shift_privileges_valid_target_title_trigger = { + NOR = { + has_county_modifier = shift_privileges_monopolies_sold_modifier + has_county_modifier = shift_privileges_scutage_exemptions_modifier + has_county_modifier = shift_privileges_conflicting_deeds_modifier + } +} + +diarch_swing_scales_valid_shared_hof_trigger = { + # You must share a HoF to be able to petition one. + custom_tooltip = { + text = swing_scales_currency_interaction.tt.no_shared_hof + exists = scope:actor.faith.religious_head + exists = scope:recipient.faith.religious_head + scope:actor.faith.religious_head = scope:recipient.faith.religious_head + } + # And opinions've gotta line up. + trigger_if = { + limit = { exists = scope:actor.faith.religious_head } + # They must like you. + custom_tooltip = { + text = swing_scales_currency_interaction.tt.hof_needs_to_like_you_more + scope:actor.faith.religious_head = { + opinion = { + target = scope:actor + value >= high_positive_opinion + } + } + } + # And not like scope:recipient too much. + custom_tooltip = { + text = swing_scales_currency_interaction.tt.hof_needs_to_like_them_less + scope:actor.faith.religious_head = { + opinion = { + target = scope:recipient + value <= medium_positive_opinion + } + } + } + # Plus scope:recipient can't have anything over them. + custom_tooltip = { + text = swing_scales_currency_interaction.tt.hof_refuses_to_cross_recipient + NOT = { + scope:recipient = { has_strong_hook = scope:actor.faith.religious_head } + } + } + } +} + +diarch_liege_wants_to_stiff_regent_trigger = { + OR = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient } + opinion = { + target = scope:recipient + value <= very_high_negative_opinion + } + } +} + +cannot_release_former_regent_whilst_old_regent_holds_power_trigger = { + $PRISONER$ = { + trigger_if = { + limit = { + has_variable = imprisoned_by_diarch + exists = $PRISONER$.liege + $REGENT$ = { is_diarch_of_target = $PRISONER$.liege } + } + custom_tooltip = { + text = overthrow_regent_scheme_interaction.tt.cannot_release + NOR = { + var:imprisoned_by_diarch = $PRISONER$.imprisoner + var:imprisoned_by_diarch ?= $PRISONER$.liege.diarch + } + } + } + } +} + +interaction_actor_is_liege_with_vizierate_trigger = { + scope:recipient.liege ?= scope:actor + scope:actor = { has_diarchy_active_parameter = diarchy_is_vizierate } +} + +is_valid_basic_candidate_for_vizier_trigger = { + is_diarch_valid_trigger = yes + diarch_matches_liege_faith_gender_preference_trigger = yes +} + +# I don't have a problem, I can quit scripted triggers any time I want. +## But more seriously: mostly just here for brevity/not wanting to re-do script after I had to add a second scripted trigger targeting top lieges. +character_has_co_emperorship_trigger = { + OR = { + has_diarchy_parameter = diarchy_type_is_co_emperorship + has_diarchy_parameter = diarchy_type_is_junior_emperorship + } +} +liege_has_co_emperorship_trigger = { + liege ?= { character_has_co_emperorship_trigger = yes } +} +top_liege_has_co_emperorship_trigger = { + liege ?= { character_has_co_emperorship_trigger = yes } +} +appointment_interactions_recipient_is_suitable_co_emperor_trigger = { + scope:actor = { top_liege_has_co_emperorship_trigger = yes } + OR = { + scope:recipient = { is_diarch_of_target = scope:secondary_recipient.top_liege } + scope:secondary_recipient = { is_diarch_of_target = scope:actor.top_liege } + } + # Don't get the bonus just because we're promoting our courtiers in our realm. + trigger_if = { + limit = { + NOT = { scope:target = scope:actor.primary_title } + } + NOT = { scope:target.holder = scope:actor } + } +} + +may_appoint_co_emperors_trigger = { + highest_held_title_tier >= tier_empire + has_realm_law = acclamation_succession_law + OR = { + has_title = title:e_byzantium + has_title = title:e_roman_empire + culture = { has_cultural_parameter = unlock_co_emperors } + } +} + +may_appoint_co_monarchs_trigger = { + highest_held_title_tier >= tier_kingdom + government_has_flag = may_elevate_co_monarch +} + +valid_junior_emperor_candidate_trigger = { + is_adult = no + is_close_or_extended_family_of = $LIEGE$ + is_imprisoned = no + OR = { + is_courtier_of = $LIEGE$ + is_vassal_of = $LIEGE$ + } + # Prevent weird governments from taking place. + NOR = { + government_has_flag = government_is_special_republic + government_has_flag = government_is_theocracy + government_has_flag = government_is_landless_adventurer + } +} + +valid_co_emperor_candidate_trigger = { + is_adult = yes + is_imprisoned = no + save_temporary_scope_as = co_emperor_temp + custom_tooltip = { + text = valid_co_emperor_candidate_liege_trigger + top_liege = $LIEGE$ + } + custom_tooltip = { + text = valid_co_emperor_candidate_family_trigger + OR = { + is_close_or_extended_family_of = $LIEGE$ + AND = { + house ?= { + OR = { + is_powerful_family = yes + is_dominant_family = yes + } + } + scope:co_emperor_temp = house.house_head + any_held_title = { is_noble_family_title = yes } + } + } + } + NOR = { + has_trait = blind + has_trait = eunuch + has_trait = incapable + # Prevent weird governments from taking place. + government_has_flag = government_is_special_republic + government_has_flag = government_is_theocracy + government_has_flag = government_is_landless_adventurer + } +} + +valid_co_monarch_candidate_trigger = { + is_adult = yes + is_child_of = $LIEGE$ + is_imprisoned = no + trigger_if = { + limit = { is_ruler = no } + is_courtier_of = $LIEGE$ + } + trigger_else = { is_vassal_of = $LIEGE$ } + # Gender restrictions. + custom_tooltip = { + text = valid_co_monarch_candidate_trigger.tt.gender_wrong_for_co_rule + OR = { + AND = { + is_female = yes + $LIEGE$ = { + OR = { + has_realm_law = female_only_law + has_realm_law = female_preference_law + } + } + } + AND = { + is_male = yes + $LIEGE$ = { + OR = { + has_realm_law = male_only_law + has_realm_law = male_preference_law + } + } + } + $LIEGE$ = { has_realm_law = equal_law } + } + } + # Prevent weird governments from taking place. + NOR = { + government_has_flag = government_is_special_republic + government_has_flag = government_is_theocracy + government_has_flag = government_is_landless_adventurer + } +} + +governor_can_be_called_as_ally_in_expedition_war_basic_trigger = { + scope:actor.liege ?= { has_diarchy_parameter = unlock_diarch_requests_military_expedition_interaction } + scope:recipient = { + liege ?= scope:actor.liege + # Must be a governor. + government_has_flag = government_is_administrative + } +} + +liege_can_maim_co_ruler_without_killing_them_trigger = { + culture = { + OR = { + has_cultural_parameter = can_blind_prisoners + has_cultural_parameter = can_castrate_prisoners + } + } +} + +liege_should_systematically_maim_co_ruler_trigger = { + OR = { + AND = { + has_diarchy_active_parameter = diarchy_is_co_rulership + liege_can_maim_co_ruler_without_killing_them_trigger = yes + diarch ?= scope:recipient + } + AND = { + liege ?= { has_diarchy_active_parameter = diarchy_is_co_rulership } + liege_can_maim_co_ruler_without_killing_them_trigger = yes + is_diarch_of_target = scope:recipient + } + } +} + +valid_kingdom_for_diarch_to_demand_as_despotate_trigger = { + tier = tier_kingdom + is_landless_type_title = no + # Weird formatting for the sake of cleaner tooltips. + trigger_if = { + limit = { is_title_created = no } + is_title_created = no + } + trigger_else = { holder = scope:recipient } + scope:recipient = { completely_controls = scope:target } + NOT = { + scope:recipient.capital_county = { target_is_de_jure_liege_or_above = scope:target } + } +} + +is_in_scapegoating_diarchy_visibility_trigger = { + custom_tooltip = { + text = is_in_scapegoating_diarchy_visibility_trigger.tt.explanation + subject = scope:actor + OR = { + AND = { + scope:recipient = { $PARAMETER_TYPE$ = unlock_scapegoat_counterpart_interaction } + scope:actor = { is_diarch_of_target = scope:recipient } + } + AND = { + scope:actor = { $PARAMETER_TYPE$ = unlock_scapegoat_counterpart_interaction } + scope:recipient = { is_diarch_of_target = scope:actor } + } + } + } +} + +ai_diarch_would_maim_execute_superior_if_got_chance_trigger = { + OR = { + opinion = { + target = $LIEGE$ + value <= -1 + } + has_trait = callous + has_trait = sadistic + has_trait = ambitious + has_trait = arrogant + } + NOR = { + has_trait = compassionate + has_trait = content + } +} + +################################################## +# Succession Triggers + +diarch_candidate_shares_relationship_with_lesser_consort_trigger = { + # Grab the right scope. + save_temporary_scope_as = char_temp + # Now check. + any_relation = { + type = $RELATION$ + is_consort_of = scope:char_temp.liege + OR = { + NOT = { exists = scope:char_temp.liege.primary_spouse } + NOT = { this = scope:char_temp.liege.primary_spouse } + } + } +} + +diarch_candidate_shares_relationship_with_child_trigger = { + # Grab the right scope. + save_temporary_scope_as = char_temp + # Now check. + any_relation = { + type = $RELATION$ + is_adult = yes + is_child_of = scope:char_temp.liege + is_courtier_of = scope:char_temp.liege + } +} + +diarch_candidate_shares_minority_status_with_trigger = { + # For performance purposes, let's do the most obvious check first. + any_liege_or_above = { + NOT = { $QUALITY$ = scope:char_temp.$QUALITY$ } + } + # Grab the right scope. + save_temporary_scope_as = char_temp + liege = { + # Ok, now make sure we connect to at least one suitable character. + ## Yes we're putting a whole trigger in the scripted parameter. + ### No one will believe you if you try to tell them of my crimes. + $TRIGGER_OR_TARGET$ = { $QUALITY$ = scope:char_temp.$QUALITY$ } + } +} + +################################################## +# Important Actions + +action_regent_imprison_suitable_char_covassals_trigger = { + opinion = { + target = root + value <= very_high_negative_opinion + } + save_temporary_scope_as = char_temp + # Could you take the interaction? + root = { + is_character_interaction_valid = { + interaction = diarch_imprison_interaction + recipient = scope:char_temp + } + } +} + +action_regent_imprison_suitable_char_rivals_trigger = { + save_temporary_scope_as = char_temp + root = { + is_character_interaction_valid = { + interaction = diarch_imprison_interaction + recipient = scope:char_temp + } + } +} + +action_shift_privileges_suitable_char_trigger = { + save_temporary_scope_as = char_temp + # Make sure we've got equal or higher diplo and so might get away with a cheeky forgery. + diplomacy <= root.diplomacy + # And we don't want to spam with little guys, especially as they're more expensive to use prestige on. + OR = { + highest_held_title_tier >= tier_duchy + # But don't block this out entirely within duchies. + liege.highest_held_title_tier = tier_duchy + } + # Could you take the interaction? + root = { + is_character_interaction_valid = { + interaction = diarch_shift_privileges_interaction + recipient = scope:char_temp + } + } +} + +action_legal_meddling_suitable_char_trigger = { + max_military_strength < root.eighty_percent_of_max_military_strength + NOR = { + has_any_good_relationship_with_character_trigger = { CHARACTER = root } + root = { has_truce = prev } + is_allied_to = root + } +} + +action_legal_meddling_suitable_title_trigger = { + diarch_legal_meddling_claimable_title_trigger = { ACTOR = root } + root = { + # Could you take the interaction? + is_character_interaction_valid = { + interaction = diarch_legal_meddling_interaction + recipient = scope:char_temp + } + } +} + +################################################## +# Decisions + +diarch_coup_valid_conspiracy_culmination_vassals_trigger = { + OR = { + is_powerful_vassal_of = $LIEGE$ + house ?= { is_powerful_family = yes } + } + is_imprisoned = no +} + +diarch_coup_attempt_is_valid_trigger = { + # Diarchy checks. + is_diarch = yes + $LIEGE$ = { has_diarchy_active_parameter = regents_can_try_to_overthrow_present_lieges } + ## Liege must be physically present to overthrow. You can't coup them whilst they're abroad. + $LIEGE$ = { + is_imprisoned = no + is_travelling = no + is_at_war = no + custom_tooltip = { + text = custom.not_attending_activity + NOT = { exists = involved_activity } + } + age >= 5 + } + # Support checks. + ## Have you gathered enough support from the realm's powerful vassals and/or councillors? + custom_tooltip = { + text = diarch_attempt_to_overthrow_liege.tt.majority_powerful_vassal_support + subject = root + has_variable_list = coup_pv_supporters_list + any_in_list = { + variable = coup_pv_supporters_list + count >= pv_overthrow_threshold_value + # Double check they're still valid. + diarch_coup_valid_conspiracy_culmination_vassals_trigger = { LIEGE = $LIEGE$ } + } + } + # As a speed-bump, we check how long this diarchy has been on for. + OR = { + # Either, you've been a diarch for a good long ways. + years_as_diarch >= 8 + # Or, you haven't been but everyone is kinda used to the concept of a diarch. + AND = { + years_as_diarch >= 4 + $LIEGE$ = { years_in_diarchy >= 10 } + } + # OR, you've laid the groundwork for such a coup already + custom_tooltip = { + text = diarch_attempt_to_overthrow_liege_bypass + has_character_flag = laid_coup_groundwork_flag + } + } + # And finally, for ease of sanity, your liege must be of a certain size. + $LIEGE$.sub_realm_size >= minor_realm_size +} + +diarch_coup_attempt_is_valid_showing_failure_only_trigger = { + # Diarch must be able to act. + diarch_cannot_be_disabled_trigger = { DIARCH = $DIARCH$ } + # Plus standard checks. + is_available_adult = yes + # Filter this out in advance, else we risk trying to enter a duel later, only to find we're already engaged in one. + custom_description = { + text = ENGAGED_IN_SINGLE_COMBAT + NOT = { exists = var:engaged_in_single_combat } + } + # Liege must have _something_ at the highest tier that isn't a HoF title. + custom_tooltip = { + text = diarch_attempt_to_overthrow_liege.tt.liege_cant_hold_only_hof_highest_title + liege = { + any_held_title = { + tier = prev.highest_held_title_tier + is_head_of_faith = no + } + } + } +} + +diarch_coup_attempt_grabbable_kingdom_trigger = { + highest_held_title_tier >= tier_empire + any_held_title = { + diarch_coup_attempt_grabbable_kingdom_guts_trigger = { TARGET = $TARGET$ } + } +} + +diarch_coup_attempt_grabbable_kingdom_guts_trigger = { + tier = tier_kingdom + is_head_of_faith = no + any_de_jure_county = { + holder = { + any_liege_or_above = { this = $TARGET$ } + } + } +} + +diarch_coup_attempt_grabbable_capital_and_duchies_trigger = { + is_head_of_faith = no + is_landless_type_title = no + OR = { + AND = { + tier = tier_county + this.duchy = $TARGET$.primary_title.title_capital_county.duchy + } + this = $TARGET$.primary_title.title_capital_county.duchy + } +} + +################################################## +# Mandates + +#TODO_CD_EP2; rig these up to the actual loyalty value. + +diarch_loyalty_due_to_hook_trigger = { + $LIEGE$ = { + OR = { + has_hook_of_type = { + target = $DIARCH$ + type = loyalty_hook + } + has_hook_of_type = { + target = $DIARCH$ + type = predecessor_loyalty_hook + } + } + } +} + +diarch_wants_to_engage_with_mandates_trigger = { + save_temporary_scope_value_as = { + name = diarch_loyalty + value = $DIARCH$.diarch_loyalty_score_type_regency_value + } + OR = { + scope:diarch_loyalty >= diarch_loyalty_visibly_loyal_threshold + scope:diarch_loyalty <= diarch_loyalty_visibly_disloyal_threshold + } +} + +################################################## +# Events + +character_has_regency_diarchy_trigger = { + exists = diarch + OR = { + has_diarchy_active_parameter = diarchy_type_is_temporary_regency + has_diarchy_active_parameter = diarchy_type_is_entrenched_regency + } +} diff --git a/common/scripted_triggers/00_distance_triggers.txt b/common/scripted_triggers/00_distance_triggers.txt new file mode 100644 index 00000000..c4da1322 --- /dev/null +++ b/common/scripted_triggers/00_distance_triggers.txt @@ -0,0 +1,23 @@ +character_realm_neighbors_target_trigger = { + any_character_to_title_neighboring_county = { + holder = { + OR = { + this = $TARGET_CHARACTER$ + target_is_liege_or_above = $TARGET_CHARACTER$ + } + } + } +} + +should_notify_player_about_neighboring_rulers_wars_trigger = { + NOR = { + target_is_liege_or_above = $TARGET_CHARACTER$ # We have separate toasts for this. + target_is_vassal_or_below = $TARGET_CHARACTER$ # We are probably already aware of our vassal's wars (and likely involved in them in some fashion). + } + character_realm_neighbors_target_trigger = { TARGET_CHARACTER = $TARGET_CHARACTER$ } + OR = { + $TARGET_CHARACTER$ = { is_independent_ruler = yes } # Independent rulers are always relevant. + liege = $TARGET_CHARACTER$.liege # Rulers are also relevant if we have the same direct liege (We might be able to DoW them, or at least want to stay informed as to relative power level). + top_liege = $TARGET_CHARACTER$.liege # Alternatively, if their direct liege is our top liege, we can still DoW them (If I am a Duke under a King under an Emperor, I might still want to DoW one of the Emperor's other King or Duke vassals.) + } +} \ No newline at end of file diff --git a/common/scripted_triggers/00_dynasty_triggers.txt b/common/scripted_triggers/00_dynasty_triggers.txt new file mode 100644 index 00000000..af7b4d26 --- /dev/null +++ b/common/scripted_triggers/00_dynasty_triggers.txt @@ -0,0 +1,119 @@ + + +is_house_head = { # For unevaluated triggers + trigger_if = { + limit = { + exists = this + } + save_temporary_scope_as = house_check + exists = house + house = { + house_head = scope:house_check + } + } +} + +is_dynast = { + save_temporary_scope_as = dynast_check + custom_description = { + text = is_dynast + subject = scope:dynast_check + + exists = dynasty + dynasty = { + dynast = scope:dynast_check + } + } +} + +can_start_new_legacy_track_trigger = { + exists = dynasty + dynasty = { + OR = { + NOT = { has_dynasty_perk = blood_legacy_1 } + has_dynasty_perk = blood_legacy_5 + } + OR = { + NOT = { has_dynasty_perk = warfare_legacy_1 } + has_dynasty_perk = warfare_legacy_5 + } + OR = { + NOT = { has_dynasty_perk = law_legacy_1 } + has_dynasty_perk = law_legacy_5 + } + OR = { + NOT = { has_dynasty_perk = guile_legacy_1 } + has_dynasty_perk = guile_legacy_5 + } + OR = { + NOT = { has_dynasty_perk = erudition_legacy_1 } + has_dynasty_perk = erudition_legacy_5 + } + OR = { + NOT = { has_dynasty_perk = glory_legacy_1 } + has_dynasty_perk = glory_legacy_5 + } + OR = { + NOT = { has_dynasty_perk = kin_legacy_1 } + has_dynasty_perk = kin_legacy_5 + } + OR = { + NOT = { has_fp1_dlc_trigger = yes } + NOT = { has_dynasty_perk = fp1_adventure_legacy_1 } + has_dynasty_perk = fp1_adventure_legacy_5 + } + OR = { + NOT = { has_fp1_dlc_trigger = yes } + NOT = { has_dynasty_perk = fp1_pillage_legacy_1 } + has_dynasty_perk = fp1_pillage_legacy_5 + } + OR = { + NOT = { has_dlc_feature = hybridize_culture } + NOT = { has_dynasty_perk = ep1_culture_legacy_1 } + has_dynasty_perk = ep1_culture_legacy_5 + } + OR = { + NOT = { has_dlc_feature = the_fate_of_iberia } + NOT = { has_dynasty_perk = fp2_urbanism_legacy_1 } + has_dynasty_perk = fp2_urbanism_legacy_5 + } + OR = { + NOT = { has_dlc_feature = the_fate_of_iberia } + NOT = { has_dynasty_perk = fp2_coterie_legacy_1 } + has_dynasty_perk = fp2_coterie_legacy_5 + } + OR = { + NOT = { has_dlc_feature = legacy_of_persia } + NOT = { has_dynasty_perk = fp3_khvarenah_legacy_1 } + has_dynasty_perk = fp3_khvarenah_legacy_5 + } + OR = { + NOT = { has_dlc_feature = tours_and_tournaments } + NOT = { has_dynasty_perk = ep2_activities_legacy_1 } + has_dynasty_perk = ep2_activities_legacy_5 + } + OR = { + NOT = { has_dlc_feature = legends_of_the_dead } + NOT = { has_dynasty_perk = ce1_heroic_legacy_1 } + has_dynasty_perk = ce1_heroic_legacy_5 + } + OR = { + NOT = { has_dlc_feature = legends_of_the_dead } + NOT = { has_dynasty_perk = ce1_legitimacy_legacy_1 } + has_dynasty_perk = ce1_legitimacy_legacy_5 + } + OR = { + NOT = { has_dlc_feature = roads_to_power } + NOT = { has_dynasty_perk = ep3_administrative_legacy_1 } + has_dynasty_perk = ep3_administrative_legacy_5 + } + } +} + +dynasty_head_prefers_activities_trigger = { + has_trait = diligent + OR = { + has_trait = gregarious + has_trait = lifestyle_reveler + } +} diff --git a/common/scripted_triggers/00_economic_triggers.txt b/common/scripted_triggers/00_economic_triggers.txt new file mode 100644 index 00000000..3e44615d --- /dev/null +++ b/common/scripted_triggers/00_economic_triggers.txt @@ -0,0 +1,99 @@ +can_make_expensive_purchase_trigger = { + OR = { + # Players can make their own decisions. + is_ai = no + # Some people are just really bad with money. + has_trait = profligate + ## If a purchase is unwise but would be magnanimous, save this scope first to flag it as valid in the event. + ### If you're in a chain, don't forget to clear the scope up afterwards with clear_saved_scope, otherwise it might affect other usages of the trigger further down the chain. + AND = { + has_trait = improvident + exists = scope:generous_purchase + } + # And if you've got the cash to spare, who cares? + short_term_gold >= $PRICE$ + } +} + +county_has_any_special_mine_building_trigger = { + OR = { + # Rammelsberg Mines + has_building_or_higher = rammelsberg_mines_01 + # Kutna_hora Mines + has_building_or_higher = kutna_hora_mines_01 + # Kremnica Mines + has_building_or_higher = kremnica_mines_01 + # Falun Mines + has_building_or_higher = falun_mines_01 + # Schwaz Mines + has_building_or_higher = schwaz_mines_01 + # Argentiera Mines + has_building_or_higher = argentiera_mines_01 + # Kollur Mines + has_building_or_higher = kollur_mines_01 + # Siderokausia Mines + has_building_or_higher = siderokausia_mines_01 + # Mali Mines + has_building_or_higher = mali_mines_01 + # Konasamudram Mines + has_building_or_higher = konasamudram_mines_01 + # Dean Mines + has_building_or_higher = dean_mines_01 + # Zawar Mines + has_building_or_higher = zawar_mines_01 + # Takkeda Mines + has_building_or_higher = takkeda_mines_01 + # Khetri Mines + has_building_or_higher = khetri_mines_01 + # Taghaza Mines + has_building_or_higher = taghaza_mines_01 + # Ijil Mines + has_building_or_higher = ijil_mines_01 + # Turda Mines + has_building_or_higher = turda_mines_01 + # Phocaea Mines + has_building_or_higher = phocaea_mines_01 + # Pansjhir Mines + has_building_or_higher = pansjhir_mines_01 + # Trepca Mines + has_building_or_higher = trepca_mines_01 + # Rudnik Mines + has_building_or_higher = rudnik_mines_01 + # Cevennes Mines + has_building_or_higher = cevennes_mines_01 + # Allaq Mines + has_building_or_higher = allaq_mines_01 + # Verespatak Mines + has_building_or_higher = verespatak_mines_01 + # Nishapur Mines + has_building_or_higher = nishapur_mines_01 + # Srebrenica Mines + has_building_or_higher = srebrenica_mines_01 + # Ratnapura Mines + has_building_or_higher = ratnapura_mines_01 + } +} + +location_has_multi_story_buildings_trigger = { + $LOCATION$ = { + # Filter out ocean-going people. + ## Yes, this will error otherwise. + is_sea_province = no + # We just want to make sure we're not dealing with a tribe, who likely won't have too many really tall buildings. + NOT = { has_holding_type = tribal_holding } + # And that the place isn't a total backwater, which would also stop it having too many tall buildings. + county = { development_level >= 10 } + } +} + +location_has_fast_traffic_trigger = { + $LOCATION$ = { + # Filter out ocean-going people. + ## This one just might hypothetically error, so we check just in case. + is_sea_province = no + # We just want to make sure we're not dealing with a tribe, who would probably have carts but likely don't have to worry about them speeding much. + NOT = { has_holding_type = tribal_holding } + # And that the place isn't a total backwater, which would also keep the flow down. + county = { development_level >= 20 } + } +} diff --git a/common/scripted_triggers/00_education_triggers.txt b/common/scripted_triggers/00_education_triggers.txt new file mode 100644 index 00000000..b565baf7 --- /dev/null +++ b/common/scripted_triggers/00_education_triggers.txt @@ -0,0 +1,453 @@ + + +###TRIGGER LIST + +#Takes RANK and OPERATOR +#OPERATOR can be "equals", "greater" or "less" +has_education_rank_trigger = { + save_temporary_scope_value_as = { + name = operator + value = flag:$OPERATOR$ + } + OR = { + AND = { + scope:operator = flag:equals + OR = { + has_trait_rank = { + trait = education_diplomacy + rank = $RANK$ + } + has_trait_rank = { + trait = education_martial + rank = $RANK$ + } + has_trait_rank = { + trait = education_stewardship + rank = $RANK$ + } + has_trait_rank = { + trait = education_intrigue + rank = $RANK$ + } + has_trait_rank = { + trait = education_learning + rank = $RANK$ + } + } + } + AND = { + scope:operator = flag:greater + OR = { + has_trait_rank = { + trait = education_diplomacy + rank > $RANK$ + } + has_trait_rank = { + trait = education_martial + rank > $RANK$ + } + has_trait_rank = { + trait = education_stewardship + rank > $RANK$ + } + has_trait_rank = { + trait = education_intrigue + rank > $RANK$ + } + has_trait_rank = { + trait = education_learning + rank > $RANK$ + } + } + } + #AND = { + # scope:operator = flag:less + # OR = { + # has_trait_rank = { + # trait = education_diplomacy + # rank < $RANK$ + # } + # has_trait_rank = { + # trait = education_martial + # rank < $RANK$ + # } + # has_trait_rank = { + # trait = education_stewardship + # rank < $RANK$ + # } + # has_trait_rank = { + # trait = education_intrigue + # rank < $RANK$ + # } + # has_trait_rank = { + # trait = education_learning + # rank < $RANK$ + # } + # } + #} + } +} + +has_education_rank_1_trigger = { + OR = { + has_trait_rank = { + trait = education_diplomacy + rank = 1 + } + has_trait_rank = { + trait = education_martial + rank = 1 + } + has_trait_rank = { + trait = education_stewardship + rank = 1 + } + has_trait_rank = { + trait = education_intrigue + rank = 1 + } + has_trait_rank = { + trait = education_learning + rank = 1 + } + } +} + +has_education_rank_2_trigger = { + OR = { + has_trait_rank = { + trait = education_diplomacy + rank = 2 + } + has_trait_rank = { + trait = education_martial + rank = 2 + } + has_trait_rank = { + trait = education_stewardship + rank = 2 + } + has_trait_rank = { + trait = education_intrigue + rank = 2 + } + has_trait_rank = { + trait = education_learning + rank = 2 + } + } +} + +has_education_rank_3_trigger = { + OR = { + has_trait_rank = { + trait = education_diplomacy + rank = 3 + } + has_trait_rank = { + trait = education_martial + rank = 3 + } + has_trait_rank = { + trait = education_stewardship + rank = 3 + } + has_trait_rank = { + trait = education_intrigue + rank = 3 + } + has_trait_rank = { + trait = education_learning + rank = 3 + } + } +} + +has_education_rank_4_trigger = { + OR = { + has_trait_rank = { + trait = education_diplomacy + rank = 4 + } + has_trait_rank = { + trait = education_martial + rank = 4 + } + has_trait_rank = { + trait = education_stewardship + rank = 4 + } + has_trait_rank = { + trait = education_intrigue + rank = 4 + } + has_trait_rank = { + trait = education_learning + rank = 4 + } + } +} + +has_education_rank_5_trigger = { + OR = { + has_trait_rank = { + trait = education_diplomacy + rank = 5 + } + has_trait_rank = { + trait = education_martial + rank = 5 + } + has_trait_rank = { + trait = education_stewardship + rank = 5 + } + has_trait_rank = { + trait = education_intrigue + rank = 5 + } + has_trait_rank = { + trait = education_learning + rank = 5 + } + } +} + +has_education_focus_trigger = { + OR = { + has_focus = education_diplomacy + has_focus = education_martial + has_focus = education_stewardship + has_focus = education_intrigue + has_focus = education_learning + } +} + +#Takes RANK and FOCUS +education_points_and_focus_equals_education_rank = { + save_temporary_scope_value_as = { + name = education_rank + value = $RANK$ + } + OR = { + AND = { + has_focus = education_$FOCUS$ + OR = { + AND = { + var:education_$FOCUS$_variable <= education_level_1 + scope:education_rank = 1 + } + AND = { + var:education_$FOCUS$_variable <= education_level_2 + scope:education_rank = 2 + } + AND = { + var:education_$FOCUS$_variable <= education_level_3 + scope:education_rank = 3 + } + AND = { + var:education_$FOCUS$_variable > education_level_3 + scope:education_rank = 4 + } + } + } + } +} + +#Takes RANK +education_points_equals_education_rank = { + OR = { + education_points_and_focus_equals_education_rank = { RANK = $RANK$ FOCUS = diplomacy } + education_points_and_focus_equals_education_rank = { RANK = $RANK$ FOCUS = martial } + education_points_and_focus_equals_education_rank = { RANK = $RANK$ FOCUS = stewardship } + education_points_and_focus_equals_education_rank = { RANK = $RANK$ FOCUS = intrigue } + education_points_and_focus_equals_education_rank = { RANK = $RANK$ FOCUS = learning } + } +} + +#Affinity/disaffinity +#For children +has_diplomacy_education_affinity_childhood_trait_trigger = { + OR = { + has_trait = charming + has_trait = curious + } +} + +has_martial_education_affinity_childhood_trait_trigger = { + OR = { + has_trait = rowdy + has_trait = bossy + } +} + +has_stewardship_education_affinity_childhood_trait_trigger = { + OR = { + has_trait = bossy + has_trait = pensive + } +} + +has_intrigue_education_affinity_childhood_trait_trigger = { + OR = { + has_trait = charming + has_trait = rowdy + } +} + +has_learning_education_affinity_childhood_trait_trigger = { + OR = { + has_trait = pensive + has_trait = curious + } +} + +has_diplomacy_education_disaffinity_childhood_trait_trigger = { + has_trait = bossy +} + +has_martial_education_disaffinity_childhood_trait_trigger = { + has_trait = curious +} + +has_stewardship_education_disaffinity_childhood_trait_trigger = { + has_trait = charming +} + +has_intrigue_education_disaffinity_childhood_trait_trigger = { + has_trait = pensive +} + +has_learning_education_disaffinity_childhood_trait_trigger = { + has_trait = rowdy +} + +#For adults +had_diplomacy_education_affinity_childhood_trait_trigger = { + has_variable = childhood_trait_type + OR = { + var:childhood_trait_type = flag:charming + var:childhood_trait_type = flag:curious + } +} + +had_martial_education_affinity_childhood_trait_trigger = { + has_variable = childhood_trait_type + OR = { + var:childhood_trait_type = flag:rowdy + var:childhood_trait_type = flag:bossy + } +} + +had_stewardship_education_affinity_childhood_trait_trigger = { + has_variable = childhood_trait_type + OR = { + var:childhood_trait_type = flag:bossy + var:childhood_trait_type = flag:pensive + } +} + +had_intrigue_education_affinity_childhood_trait_trigger = { + has_variable = childhood_trait_type + OR = { + var:childhood_trait_type = flag:charming + var:childhood_trait_type = flag:rowdy + } +} + +had_learning_education_affinity_childhood_trait_trigger = { + has_variable = childhood_trait_type + OR = { + var:childhood_trait_type = flag:pensive + var:childhood_trait_type = flag:curious + } +} + +had_diplomacy_education_disaffinity_childhood_trait_trigger = { + has_variable = childhood_trait_type + var:childhood_trait_type = flag:bossy +} + +had_martial_education_disaffinity_childhood_trait_trigger = { + has_variable = childhood_trait_type + var:childhood_trait_type = flag:curious +} + +had_stewardship_education_disaffinity_childhood_trait_trigger = { + has_variable = childhood_trait_type + var:childhood_trait_type = flag:charming +} + +had_intrigue_education_disaffinity_childhood_trait_trigger = { + has_variable = childhood_trait_type + var:childhood_trait_type = flag:pensive +} + +had_learning_education_disaffinity_childhood_trait_trigger = { + has_variable = childhood_trait_type + var:childhood_trait_type = flag:rowdy +} + +has_university_building_trigger = { + OR = { + has_building_or_higher = generic_university + has_building_or_higher = al_azhar_university + has_building_or_higher = sankore_university + has_building_or_higher = siena_university + has_building_or_higher = nalanda_university + has_building_or_higher = house_of_wisdom_01 + has_building_or_higher = al_qarawiyyin_university_01 + has_building_or_higher = somapura_university_01 + has_building_or_higher = cluny_abbey_01 + } +} + +characters_have_same_education_group_trigger = { + # First, we make sure that both characters have an education finalised. + $CHARACTER_1$ = { + OR = { + has_trait = education_diplomacy + has_trait = education_martial + has_trait = education_stewardship + has_trait = education_intrigue + has_trait = education_learning + } + } + $CHARACTER_2$ = { + OR = { + has_trait = education_diplomacy + has_trait = education_martial + has_trait = education_stewardship + has_trait = education_intrigue + has_trait = education_learning + } + } + # Now check for the actual traits. + $CHARACTER_1$ = { + # Diplomacy. + trigger_if = { + limit = { has_trait = education_diplomacy } + $CHARACTER_2$ = { has_trait = education_diplomacy} + } + # Martial. + trigger_if = { + limit = { has_trait = education_martial } + $CHARACTER_2$ = { has_trait = education_martial } + } + # Stewardship. + trigger_if = { + limit = { has_trait = education_stewardship } + $CHARACTER_2$ = { has_trait = education_stewardship } + } + # Intrigue. + trigger_if = { + limit = { has_trait = education_intrigue } + $CHARACTER_2$ = { has_trait = education_intrigue } + } + # Learning. + trigger_if = { + limit = { has_trait = education_learning } + $CHARACTER_2$ = { has_trait = education_learning } + } + } +} diff --git a/common/scripted_triggers/00_elective_triggers.txt b/common/scripted_triggers/00_elective_triggers.txt new file mode 100644 index 00000000..18263701 --- /dev/null +++ b/common/scripted_triggers/00_elective_triggers.txt @@ -0,0 +1,339 @@ +# Example: +# +# example_trigger = { +# is_country_type = default +# free_leader_slots > 0 +# } +# +# +# In a script file: +# +# trigger = { +# example_trigger = yes +# } +# + +has_unelectable_trait_trigger = { + OR = { + has_trait = disinherited + has_trait = gallivanter + is_eunuch_trigger = yes + has_trait = crusader_king #Avoid realm merging after Crusade. + has_trait = devoted + has_trait = order_member + AND = { + has_trait = bastard #If landed, he might still be electable on the grounds of being an Elector. + is_ruler = no + } + } +} + +has_unelectable_government_trigger = { + OR = { + government_has_flag = government_is_special_republic + government_has_flag = government_is_theocracy + government_has_flag = government_is_mercenary + government_has_flag = government_is_holy_order + } +} + +this_is_martial_society_trigger = { + NOR = { + faith = { has_doctrine = tenet_pacifism } + faith = { has_doctrine = tenet_dharmic_pacifism } + } + OR = { + government_has_flag = government_is_clan + government_has_flag = government_is_tribal + government_has_flag = government_is_mercenary + government_has_flag = government_is_holy_order + faith = { + OR = { + has_doctrine_parameter = great_holy_wars_active + has_doctrine_parameter = great_holy_wars_active_if_reformed + has_doctrine_parameter = cheaper_holy_wars_active + } + } + } +} + +this_is_diplomatic_society_trigger = { + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_special_republic + government_has_flag = government_is_theocracy + } + OR = { + faith = { has_doctrine = tenet_communal_identity } + faith = { has_doctrine = tenet_alexandrian_catechism } + faith = { has_doctrine = tenet_legalism } + } +} +this_is_spiritual_society_trigger = { + faith = { + NOR = { + has_doctrine = tenet_false_conversion_sanction + has_doctrine = tenet_hedonistic + has_doctrine = tenet_carnal_exaltation + has_doctrine = tenet_exaltation_of_pain + has_doctrine = tenet_pursuit_of_power + } + OR = { + has_doctrine = tenet_inner_journey + has_doctrine = tenet_asceticism + has_doctrine = tenet_literalism + has_doctrine = tenet_esotericism + has_doctrine = tenet_astrology + has_doctrine = tenet_monasticism + } + } +} + +ere_elective_politician_titles_trigger = { #Used in Byzantine Elective to determine AI behavior. + OR = { + has_council_position = councillor_chancellor + has_council_position = councillor_marshal + has_council_position = councillor_steward + has_council_position = councillor_spymaster + has_council_position = councillor_court_chaplain + } +} + +parent_for_elective_succession_trigger = { #This trigger is used to prevent grandchildren from being selectable when their parent is still available as a candidate. + NOT = { this = scope:holder } #Not the current ruler. + dynasty = scope:holder.dynasty + is_child_of = scope:holder + + OR = { + is_female = no + scope:title = { + NOT = { has_title_law = male_only_law } + } + } + OR = { + is_female = yes + scope:title = { + NOT = { has_title_law = female_only_law } + } + } + + OR = { #Candidate should not be a landless Courtier that is about to inherit a Theocracy or Republic + AND = { + is_ruler = yes + is_playable_character = yes + has_unelectable_government_trigger = no + } + NOT = { + any_heir_title = { + exists = holder + holder = { + has_unelectable_government_trigger = yes + } + } + } + } + OR = { #If the title controls the faith, candidates must be of the same faith. + scope:holder = { + NAND = { + exists = faith.religious_head + this = faith.religious_head + } + } + faith = scope:holder.faith + } + has_unelectable_trait_trigger = no + has_unelectable_government_trigger = no +} + +feudal_elective_potential_landed_candidate_trigger = { + save_temporary_scope_as = potential_candidate + has_same_government = scope:holder + #Either the candidate is in the realm, or the title is independent, or the realm of the title does NOT have protected inheritance. + OR = { + any_liege_or_above = { + this = scope:holder + } + scope:holder = { is_independent_ruler = yes } + scope:holder = { + exists = liege + NOT = { + any_liege_or_above = { + has_realm_law_flag = titles_cannot_leave_realm_on_succession + NOR = { + this = scope:potential_candidate + target_is_vassal_or_below = scope:potential_candidate + } + } + } + } + } + OR = { #If the title controls the faith, candidates must be of the same faith. + scope:holder = { + NAND = { + exists = faith.religious_head + this = faith.religious_head + } + } + this.faith = scope:holder.faith + } + has_unelectable_trait_trigger = no + has_unelectable_government_trigger = no +} + +feudal_elective_potential_landless_claimant_candidate_trigger = { + save_temporary_scope_as = potential_candidate + #Either the candidate is in the realm, or is landless, or the title is independent, or the realm of the title does NOT have protected inheritance. + OR = { + any_liege_or_above = { + this = scope:holder + } + is_ruler = no + scope:holder = { is_independent_ruler = yes } + scope:holder = { + exists = liege + NOT = { + any_liege_or_above = { + has_realm_law_flag = titles_cannot_leave_realm_on_succession + NOR = { + this = scope:potential_candidate + target_is_vassal_or_below = scope:potential_candidate + } + } + } + } + } + NOT = { #Landless characters should not be heirs to Theocracies/Republics. + any_heir_title = { + exists = holder + holder = { + has_unelectable_government_trigger = yes + } + } + } + OR = { #If the title controls the faith, candidates must be of the same faith. + scope:holder = { + NAND = { + exists = faith.religious_head + this = scope:holder.faith.religious_head + } + } + faith = scope:holder.faith + } + has_unelectable_trait_trigger = no + has_unelectable_government_trigger = no +} + +feudal_elective_potential_landless_dynastic_candidate_trigger = { + save_temporary_scope_as = potential_candidate + #Either the candidate is in the realm, or is landless, or the title is independent, or the realm of the title does NOT have protected inheritance. + OR = { + any_liege_or_above = { + this = scope:holder + } + is_ruler = no + scope:holder = { is_independent_ruler = yes } + scope:holder = { + exists = liege + NOT = { + any_liege_or_above = { + has_realm_law_flag = titles_cannot_leave_realm_on_succession + NOR = { + this = scope:potential_candidate + target_is_vassal_or_below = scope:potential_candidate + } + } + } + } + } + NOT = { #Landless characters should not be heirs to Theocracies/Republics. + any_heir_title = { + exists = holder + holder = { + has_unelectable_government_trigger = yes + } + } + } + OR = { #If the title controls the faith, candidates must be of the same faith. + scope:holder = { + NAND = { + exists = faith.religious_head + this = scope:holder.faith.religious_head + } + } + faith = scope:holder.faith + } + + #Grandkid block + trigger_if = { + limit = { + NOR = { + #Check to see that you're not the product of incest + AND = { + exists = mother + exists = father + mother = { + relation_with_character_is_incestuous_in_my_or_lieges_faith_trigger = { CHARACTER = prev.father } + } + } + #Let's make the incredibly bold assumption that if incest is completely allowed we'll just default to check the child instead of parents + scope:holder.faith = { + has_doctrine_parameter = consanguinity_unrestricted_incest + } + } + } + # We don't want grandkids to show as candidates if their parent is eligable and still alive + NOR = { + AND = { + exists = mother + mother = { + is_alive = yes + parent_for_elective_succession_trigger = yes + } + } + AND = { + exists = father + father = { + is_alive = yes + parent_for_elective_succession_trigger = yes + } + } + } + } + #if incest is allowed, check if you're the child of the holder since you can be both their kid and grandkid at the same time... + trigger_else_if = { + limit = { + OR = { + AND = { + exists = mother + mother = { + is_alive = yes + } + } + AND = { + exists = father + father = { + is_alive = yes + } + } + } + } + parent_for_elective_succession_trigger = yes + } + trigger_else = { + #Your parents are dead and you're eligible for title inheritance. Congrats. + } + + has_unelectable_trait_trigger = no + has_unelectable_government_trigger = no +} + +byzantine_elective_deformed_candidate_trigger = { + OR = { + has_trait = disfigured + has_trait = blind + is_eunuch_trigger = yes + has_trait = dwarf + has_trait = clubfooted + has_trait = inbred + } +} diff --git a/common/scripted_triggers/00_faction_triggers.txt b/common/scripted_triggers/00_faction_triggers.txt new file mode 100644 index 00000000..0c8aea97 --- /dev/null +++ b/common/scripted_triggers/00_faction_triggers.txt @@ -0,0 +1,159 @@ + +### TRIGGER LIST ### +# General Triggers: +# - +# +# Popular Faction Triggers: +# - +# + +############################ +# General Faction Triggers # +############################ +immune_to_factions_trigger = { + OR = { + # Genghis Khan is immune to factions + has_character_flag = is_temujin + # Seljuk leader is immune to factions too + has_character_flag = is_seljuk + } +} + +character_has_faction_disabling_modifier_trigger = { + NOR = { + has_character_modifier = yearly_close_watch_modifier + #Add any subsequent character modifiers above this line. + } +} + +common_character_validity_trigger = { + NOR = { #No prince-bishop can ever join + government_has_flag = government_is_theocracy + trigger_if = { + limit = { exists = cp:councillor_court_chaplain } + this = cp:councillor_court_chaplain + } + } + OR = { + $FACTION_TARGET$ = liege + any_character_active_contract = { + task_contract_target = $FACTION_TARGET$ + } + } + highest_held_title_tier > tier_barony + + #Not blocked through events + custom_description = { + text = character_blocked_from_joining + NOT = { + has_character_flag = joining_faction_block + } + } + + NOT = { has_relation_blood_brother = $FACTION_TARGET$ } +} + +common_can_character_join_trigger = { + common_character_validity_trigger = { + FACTION_TARGET = $FACTION_TARGET$ + } + is_adult = yes + NOT = { has_truce = $FACTION_TARGET$ } + $FACTION_TARGET$ = { + NOT = { has_strong_hook = root } + NOT = { is_allied_to = root } + } + + OR = { + is_ai = no + NOR = { + has_relation_lover = $FACTION_TARGET$ + has_relation_friend = $FACTION_TARGET$ + } + } + + $FACTION_TARGET$.highest_held_title_tier > tier_county + + custom_description = { + text = character_has_faction_disabling_modifier + character_has_faction_disabling_modifier_trigger = yes + } +} + +common_can_character_create_trigger = { + NOT = { has_truce = $FACTION_TARGET$ } + common_character_validity_trigger = { + FACTION_TARGET = $FACTION_TARGET$ + } + #### + # BLOCKERS + #### + # General Faction immunity + custom_description = { + text = character_is_immune_to_factions + subject = $FACTION_TARGET$ + NOT = { $FACTION_TARGET$ = { immune_to_factions_trigger = yes } } + } +} + +base_faction_trigger = { + NOT = { has_truce = scope:target } + can_join_or_create_faction_against = { + who = scope:target + faction = $FACTION_TYPE$ + } + scope:target = { NOT = { has_strong_hook = root } } + trigger_if = { + limit = { + exists = scope:recipient + } + scope:recipient = { + NOT = { is_at_war_with = scope:actor } + NOT = { has_trait = incapable } + } + } +} + + +############################ +# Popular Faction Triggers # +############################ + +character_can_join_popular_faction_trigger = { + OR = { + NOT = { faith = $FACTION$.faction_target.faith } + NOT = { culture = $FACTION$.faction_target.culture } + } +} + +county_can_join_popular_faction_trigger = { + OR = { + NOT = { faith = $FACTION$.faction_target.faith } + NOT = { culture = $FACTION$.faction_target.culture } + } +} + +has_active_diarch_for_factions_trigger = { + exists = $TARGET$.diarch + NOT = { $TARGET$.faith = $TARGET$.diarch.faith } +} + +#factions with only landless adventurers cannot exist +has_valid_faction_members_trigger = { + trigger_if = { + limit = { + is_landless_adventurer = yes + } + scope:faction = { + OR = { + any_faction_member = { + is_landless_adventurer = no + is_forced_into_faction = no + } + any_faction_county_member = { + count >= 1 + } + } + } + } +} diff --git a/common/scripted_triggers/00_family_triggers.txt b/common/scripted_triggers/00_family_triggers.txt new file mode 100644 index 00000000..acb622e8 --- /dev/null +++ b/common/scripted_triggers/00_family_triggers.txt @@ -0,0 +1,336 @@ + +###TRIGGER LIST + +# is_close_family_of_root_trigger +# is_sibling_child_of_root_trigger +# is_parent_sibling_of_root_trigger +# is_cousin_of_root_trigger +# is_sibling_in_law_of_root_trigger +# is_mother_of_compare_character_trigger +# is_father_of_compare_character_trigger +# is_sibling_of_compare_character_trigger +# is_child_of_compare_character_trigger +# is_close_family_of_compare_character_trigger +# is_allowed_to_legitimize_children_trigger + + +is_close_family_of_root_trigger = { + OR = { + any_parent = { this = root } + any_sibling = { this = root } + any_child = { this = root } + } +} + +is_close_family_or_spouse_of_root_trigger = { + OR = { + any_parent = { this = root } + any_sibling = { this = root } + any_child = { this = root } + any_spouse = { this = root } + } +} + +is_sibling_child_of_root_trigger = { + any_parent = { + even_if_dead = yes + any_sibling = { + this = root + } + } +} + +is_parent_sibling_of_root_trigger = { + any_sibling = { + even_if_dead = yes + any_child = { + this = root + } + } +} + +is_cousin_of_root_trigger = { + any_parent = { + even_if_dead = yes + any_sibling = { + even_if_dead = yes + any_child = { + this = root + } + } + } +} + +is_sibling_in_law_of_root_trigger = { + NOT = { + any_sibling = { + this = root + } + } + any_spouse = { + any_sibling = { + this = root + } + } +} + +is_cousin_in_law_of_root_trigger = { + any_spouse = { + is_cousin_of = root + NOT = { this = root } + } +} + +is_auntuncle_in_law_of_root_trigger = { + any_spouse = { + is_uncle_or_aunt_of = root + NOT = { this = root } + } +} + +is_grandmotherfather_in_law_of_root_trigger = { + any_spouse = { + is_grandparent_of = root + NOT = { this = root } + } +} + +is_great_grandmotherfather_in_law_of_root_trigger = { + any_spouse = { + is_great_grandparent_of = root + NOT = { this = root } + } +} + +is_granddaughterson_in_law_of_root_trigger = { + any_spouse = { + is_grandchild_of = root + NOT = { this = root } + } +} + +is_great_granddaughterson_in_law_of_root_trigger = { + any_spouse = { + is_great_grandchild_of = root + NOT = { this = root } + } +} + +is_nibling_in_law_of_root_trigger = { + any_spouse = { + is_nibling_of = root + NOT = { this = root } + } +} + +is_any_family_relation_or_spouse_of_root_trigger = { + OR = { + any_parent = { this = root } + any_sibling = { this = root } + any_child = { this = root } + any_spouse = { this = root } + any_parent = { + even_if_dead = yes + any_sibling = { + this = root + } + } + any_sibling = { + even_if_dead = yes + any_child = { + this = root + } + } + AND = { + NOT = { + any_sibling = { + this = root + } + } + any_parent = { + even_if_dead = yes + any_child = { + this = root + } + } + } + } +} + +is_mother_of_compare_character_trigger = { + this = scope:compare_character.mother +} + +is_father_of_compare_character_trigger = { + this = scope:compare_character.father +} + +is_sibling_of_compare_character_trigger = { + scope:compare_character = { + any_sibling = { + this = prev + } + } +} + +is_child_of_compare_character_trigger = { + scope:compare_character = { + any_child = { + this = prev + } + } +} + +is_close_family_of_compare_character_trigger = { + OR = { + this = scope:compare_character.mother + this = scope:compare_character.father + any_sibling = { + this = scope:compare_character + } + father = scope:compare_character + mother = scope:compare_character + } +} + +is_allowed_to_legitimize_children_trigger = { + is_lowborn = no + is_concubine = no + is_ruler = yes + custom_description = { + text = faith_allows_legitimization_of_bastards + faith = { + has_doctrine_parameter = bastards_legitimize + } + } +} + + + +############################################### +# Triggers that take an argument and NOT root +############################################## +is_close_family_trigger = { + OR = { + any_parent = { this = $CHARACTER$ } + any_sibling = { this = $CHARACTER$ } + any_child = { this = $CHARACTER$ } + } +} + +is_close_family_or_spouse_trigger = { + OR = { + any_parent = { this = $CHARACTER$ } + any_sibling = { this = $CHARACTER$ } + any_child = { this = $CHARACTER$ } + any_spouse = { this = $CHARACTER$ } + } +} + +is_any_family_relation_or_spouse_trigger = { + save_temporary_scope_as = root_character + OR = { + any_parent = { this = $CHARACTER$ } + any_sibling = { this = $CHARACTER$ } + any_child = { this = $CHARACTER$ } + any_spouse = { this = $CHARACTER$ } + any_parent = { + even_if_dead = yes + any_sibling = { + this = $CHARACTER$ + } + } + any_parent = { + even_if_dead = yes + any_sibling = { + even_if_dead = yes + any_child = { + this = $CHARACTER$ + } + } + } + any_sibling = { + even_if_dead = yes + any_child = { + this = $CHARACTER$ + } + } + AND = { + NOT = { + any_sibling = { + this = $CHARACTER$ + } + } + any_parent = { + even_if_dead = yes + any_child = { + this = $CHARACTER$ + } + } + } + + #child/parent/sibling/nephew/grandchild/grandparent/uncle/aunt/niece/nephew is married to the other + any_spouse = { + OR = { + is_close_family_of = $CHARACTER$ + is_nibling_of = $CHARACTER$ + is_uncle_or_aunt_of = $CHARACTER$ + } + } + $CHARACTER$ = { + any_spouse = { + OR = { + is_close_family_of = scope:root_character + is_nibling_of = scope:root_character + is_uncle_or_aunt_of = scope:root_character + } + } + } + #child/parent/sibling is married to other's child/parent/sibling + any_close_family_member = { + OR = { + is_parent_of = scope:root_character + is_child_of = scope:root_character + is_sibling_of = scope:root_character + } + any_spouse = { + OR = { + is_parent_of = $CHARACTER$ + is_child_of = $CHARACTER$ + is_sibling_of = $CHARACTER$ + } + } + } + } +} + + +house_head_would_approve_legitimization_trigger = { + $LEGITIMIZER$ = { + save_temporary_scope_as = the_legitimizer + } + $BASTARD$ = { + save_temporary_scope_as = the_bastard + } + trigger_if = { + limit = { + exists = scope:legitimizer.house + } + scope:legitimizer.house.house_head = { + save_temporary_scope_as = the_house_head + } + + house_head_legitimize_approval_rating > 0 + } +} + +is_allowed_to_legitimize_child_trigger = { + is_allowed_to_legitimize_children_trigger = yes + OR = { + this = house.house_head + house_head_would_approve_legitimization_trigger = { + LEGITIMIZER = $LEGITIMIZER$ + BASTARD = $BASTARD$ + } + } +} diff --git a/common/scripted_triggers/00_feast_activity_triggers.txt b/common/scripted_triggers/00_feast_activity_triggers.txt new file mode 100644 index 00000000..f5dc3a77 --- /dev/null +++ b/common/scripted_triggers/00_feast_activity_triggers.txt @@ -0,0 +1,66 @@ + +###TRIGGER LIST + +# has_strong_religious_conviction_trigger + +#Check whether any special conditions are true. +#Make sure conditions for new special Main Events are added to this! +has_special_main_event_potential = { + scope:activity = { + has_variable = potential_friend + } +} + +is_murder_feast = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_murder + } + } +} + +feast_default_participant_including_player_trigger = { + is_ai = yes + NOT = { this = root } + is_alive = yes + is_imprisoned = no +} + +feast_default_participant_trigger = { + is_ai = yes + NOT = { this = root } + is_alive = yes + is_imprisoned = no +} + +feast_default_adult_participant_trigger = { + is_ai = yes + NOT = { this = root } + is_adult = yes + is_alive = yes + is_imprisoned = no +} + +has_hosted_feast_opinion_targeting_character = { + OR = { + has_opinion_modifier = { + modifier = feast_hosted_successful_feast + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = feast_hosted_successful_feast_with_music + target = $CHARACTER$ + } + } +} + +use_goblet_in_tavern_trigger = { + OR = { + location.culture ?= { has_graphical_india_culture_group_trigger = yes } + location.culture ?= { has_graphical_mena_culture_group_trigger = yes } + location.culture ?= { has_building_gfx = iranian_building_gfx } + location.culture ?= { has_graphical_african_culture_group_trigger = yes } + location.culture ?= { has_graphical_steppe_culture_group_trigger = yes } + } +} diff --git a/common/scripted_triggers/00_food_scripted_triggers.txt b/common/scripted_triggers/00_food_scripted_triggers.txt new file mode 100644 index 00000000..da68c3ea --- /dev/null +++ b/common/scripted_triggers/00_food_scripted_triggers.txt @@ -0,0 +1,56 @@ + +# James _insisted_ I make this file. So here we are. + +################################################## +# VEGETABLE TRIGGERS + +province_has_vegetable_carrot_trigger = { + OR = { + geographical_region = world_india + geographical_region = world_middle_east + geographical_region = world_europe + geographical_region = world_steppe_west + geographical_region = world_asia_minor + } +} + +province_has_vegetable_parsnip_trigger = { + NOT = { geographical_region = world_africa } +} + +province_has_vegetable_turnip_trigger = { + NOT = { geographical_region = world_africa } +} + +province_has_vegetable_yams_trigger = { + OR = { + # African yams + geographical_region = world_africa + # Chinese yams + geographical_region = world_tibet + geographical_region = world_burma + geographical_region = world_steppe_east + geographical_region = world_steppe_tarim + } +} + +province_has_vegetable_kokoro_trigger = { + geographical_region = world_africa +} + +province_has_vegetable_ginger_trigger = { + OR = { + geographical_region = world_india + geographical_region = world_burma + } +} + +province_has_vegetable_taro_trigger = { + OR = { + geographical_region = world_india + geographical_region = world_burma + geographical_region = world_tibet + geographical_region = world_steppe_east + geographical_region = world_steppe_tarim + } +} diff --git a/common/scripted_triggers/00_funeral_and_body_disposal_triggers.txt b/common/scripted_triggers/00_funeral_and_body_disposal_triggers.txt new file mode 100644 index 00000000..24a9b908 --- /dev/null +++ b/common/scripted_triggers/00_funeral_and_body_disposal_triggers.txt @@ -0,0 +1,42 @@ + +################################################################ +### Triggers related to funerals and general body-related things + +body_is_available = { + is_alive = no + time_since_death = { + years <= 5 # Usually it takes a body less time than this to decompose, but we can plausibly say the body is being preserved in some way + } + NOT = { has_dead_character_variable = body_has_been_disposed } +} + +# NOTE: Keep this trigger in sync with `funeral_add_funeral_targets_to_list` effect +has_available_funeral_target = { + OR = { + primary_title ?= { # Previous holders of your primary title + any_past_holder = { + body_is_available = yes + } + } + any_close_or_extended_family_member = { + even_if_dead = yes + body_is_available = yes + } + any_spouse = { + even_if_dead = yes + body_is_available = yes + } + any_memory = { + OR = { + has_memory_type = friend_died + has_memory_type = lover_died + has_memory_type = soulmate_died + } + trigger_if = { + limit = { exists = memory_participant:dead_relation } + memory_participant:dead_relation = { body_is_available = yes } + } + trigger_else = { always = no } + } + } +} diff --git a/common/scripted_triggers/00_game_rule_triggers.txt b/common/scripted_triggers/00_game_rule_triggers.txt new file mode 100644 index 00000000..aafa1a59 --- /dev/null +++ b/common/scripted_triggers/00_game_rule_triggers.txt @@ -0,0 +1,281 @@ +hungarian_migration_valid_ai_mogyer_ruler_trigger = { + culture = culture:mogyer + is_ai = yes + government_has_flag = government_is_tribal + is_at_war = no + highest_held_title_tier <= tier_kingdom + OR = { + is_independent_ruler = yes + NOT = { + liege = { culture = culture:mogyer } + } + } +} + +hungarian_migration_valid_pannonian_target_trigger = { + NOR = { + culture = culture:mogyer + any_liege_or_above = { culture = culture:mogyer } + } + is_ai = yes + any_realm_county = { + count >= $COUNT$ + title_province = { geographical_region = custom_hungary } + } +} + +exclave_independence_trigger = { + is_independent_ruler = yes + NOT = { has_title = title:k_papal_state } + exists = root.capital_province + any_sub_realm_title = { + tier = tier_county + NOT = { + is_connected_to = { + target = root.capital_province.county + } + } + } + trigger_if = { + limit = { + exists = primary_heir + } + primary_heir = { + NOR = { + is_independent_ruler = yes # Disallow this when the heir is independent, lest we risk breaking up realms that should be connected + is_ai = no # Players always inherit everything + } + } + } +} + +# Sometimes we disable these events for specific characters. +harm_game_rule_enablement_trigger = { + # Disable entirely if harm_safe. + trigger_if = { + limit = { has_game_rule = harm_safe } + always = no + } + # harm_target_player_only + trigger_else_if = { + limit = { has_game_rule = harm_target_player_only } + is_ai = no + } + # harm_target_ai_only + trigger_else_if = { + limit = { has_game_rule = harm_target_ai_only } + is_ai = yes + } + # harm_target_all + trigger_else = { always = yes } + # Never just kill the player if it'd utterly game-over them. + trigger_if = { + limit = { is_ai = no } + # Either because they have no heir. + exists = player_heir + # Or because they have an heir they can't survive with. + player_heir.dynasty ?= dynasty + } + # Immortals do not receive harm events, as they would be inevitably killed by them over a long enough period of time. + NOT = { has_trait = immortal } +} + +# Who do we care about when recording variable logs for harm events? +harm_game_rule_valid_for_logging_trigger = { + OR = { + AND = { + highest_held_title_tier >= tier_duchy + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_theocracy + } + } + any_close_family_member = { + highest_held_title_tier >= tier_duchy + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_theocracy + } + } + } +} + +rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = { + trigger_if = { + limit = { has_game_rule = title_creation_imperial_power_projection_targeting_ai_only } + is_ai = yes + } + trigger_else_if = { + limit = { has_game_rule = title_creation_imperial_power_projection_targeting_player_only } + is_ai = no + } + trigger_else = { always = yes } +} + +rule_title_creation_imperial_power_projection_title_creation_trigger = { + trigger_if = { + limit = { + has_game_rule = title_creation_imperial_power_projection_any_power_advantage + rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = yes + highest_held_title_tier <= tier_kingdom + } + custom_tooltip = { + text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.any_power_advantage + any_neighboring_top_liege_realm_owner = { + count = all + trigger_if = { + limit = { highest_held_title_tier >= tier_empire } + save_temporary_scope_as = char_temp + OR = { + any_close_family_member = { is_spouse_of = root } + root = { has_strong_hook = scope:char_temp } + root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength + } + } + trigger_else = { always = yes } + } + } + } + trigger_else_if = { + limit = { + has_game_rule = title_creation_imperial_power_projection_hard_power_only + rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = yes + highest_held_title_tier <= tier_kingdom + } + custom_tooltip = { + text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.hard_power_only + any_neighboring_top_liege_realm_owner = { + count = all + trigger_if = { + limit = { highest_held_title_tier >= tier_empire } + save_temporary_scope_as = char_temp + root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength + } + trigger_else = { always = yes } + } + } + } + trigger_else_if = { + limit = { + has_game_rule = title_creation_imperial_power_projection_soft_power_only + rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = yes + highest_held_title_tier <= tier_kingdom + } + custom_tooltip = { + text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.soft_power_only + any_neighboring_top_liege_realm_owner = { + count = all + trigger_if = { + limit = { highest_held_title_tier >= tier_empire } + save_temporary_scope_as = char_temp + OR = { + any_close_family_member = { is_spouse_of = root } + root = { has_strong_hook = scope:char_temp } + } + } + trigger_else = { always = yes } + } + } + } + trigger_else_if = { + limit = { + has_game_rule = title_creation_imperial_power_projection_hard_power_only_strict + rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = yes + highest_held_title_tier <= tier_kingdom + } + custom_tooltip = { + text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.hard_power_only_strict.neighbours + any_neighboring_top_liege_realm_owner = { + count = all + trigger_if = { + limit = { highest_held_title_tier >= tier_empire } + save_temporary_scope_as = char_temp + root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength + } + trigger_else = { always = yes } + } + } + custom_tooltip = { + text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.hard_power_only_strict.de_jure_sharers + any_sub_realm_county = { + count = all + empire = { + OR = { + is_title_created = no + holder = { + save_temporary_scope_as = char_temp + root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength + } + } + } + } + } + } + trigger_else_if = { + limit = { + has_game_rule = title_creation_imperial_power_projection_any_power_strict + rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = yes + highest_held_title_tier <= tier_kingdom + } + custom_tooltip = { + text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.any_power_strict.neighbours + any_neighboring_top_liege_realm_owner = { + count = all + trigger_if = { + limit = { highest_held_title_tier >= tier_empire } + save_temporary_scope_as = char_temp + OR = { + any_close_family_member = { is_spouse_of = root } + root = { has_strong_hook = scope:char_temp } + root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength + } + } + trigger_else = { always = yes } + } + } + custom_tooltip = { + text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.any_power_strict.de_jure_sharers + any_sub_realm_county = { + count = all + empire = { + OR = { + is_title_created = no + holder = { + save_temporary_scope_as = char_temp + OR = { + any_close_family_member = { is_spouse_of = root } + root = { has_strong_hook = scope:char_temp } + root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength + } + } + } + } + } + } + } + trigger_else = { always = yes } +} + +game_rule_rig_norman_conquest_for_hereward_trigger = { + OR = { + has_game_rule = historicity_norman_conquest_determined_william + # We also rig it for William if we have a player Hereward and no other input. + AND = { + has_game_rule = historicity_norman_conquest_default_random + character:90028 ?= { is_ai = no } + NOT = { + any_player = { + NOT = { this = character:90028 } + any_character_war = { + OR = { + using_cb = norman_conquest_cb + using_cb = norwegian_invasion_cb + } + } + } + } + } + } +} diff --git a/common/scripted_triggers/00_general_trait_triggers.txt b/common/scripted_triggers/00_general_trait_triggers.txt new file mode 100644 index 00000000..bbd50d2c --- /dev/null +++ b/common/scripted_triggers/00_general_trait_triggers.txt @@ -0,0 +1,1236 @@ + +###TRIGGER LIST + +# has_same_education_as_compare_character_trigger +# has_same_education_as_root_trigger +# has_same_lifestyle_as_compare_character_trigger +# has_same_lifestyle_as_root_trigger +# has_same_fame_as_compare_character_trigger +# has_same_fame_as_root_trigger +# has_a_personality_trait_in_common_with_root_trigger +# has_a_personality_trait_opposite_to_root_trigger +# has_a_personality_trait_in_common_with_compare_character_trigger +# has_a_personality_trait_opposite_to_compare_character_trigger +# has_same_education_trait_as_root_trigger + +# has_diplomacy_lifestyle_trait_trigger = yes +# has_martial_lifestyle_trait_trigger = yes +# has_stewardship_lifestyle_trait_trigger = yes +# has_intrigue_lifestyle_trait_trigger = yes +# has_learning_lifestyle_trait_trigger = yes + +#has_any_high_skill_rating = yes + + + + + + +#Checks whether scope character and compare_character has the same type of education. +has_same_education_as_compare_character_trigger = { + OR = { + AND = { + OR = { + has_trait = education_intrigue_1 + has_trait = education_intrigue_2 + has_trait = education_intrigue_3 + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + } + scope:compare_character = { + OR = { + has_trait = education_intrigue_1 + has_trait = education_intrigue_2 + has_trait = education_intrigue_3 + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + } + } + } + AND = { + OR = { + has_trait = education_diplomacy_1 + has_trait = education_diplomacy_2 + has_trait = education_diplomacy_3 + has_trait = education_diplomacy_4 + has_trait = education_diplomacy_5 + } + scope:compare_character = { + OR = { + has_trait = education_diplomacy_1 + has_trait = education_diplomacy_2 + has_trait = education_diplomacy_3 + has_trait = education_diplomacy_4 + has_trait = education_diplomacy_5 + } + } + } + AND = { + OR = { + has_trait = education_stewardship_1 + has_trait = education_stewardship_2 + has_trait = education_stewardship_3 + has_trait = education_stewardship_4 + has_trait = education_stewardship_5 + } + scope:compare_character = { + OR = { + has_trait = education_stewardship_1 + has_trait = education_stewardship_2 + has_trait = education_stewardship_3 + has_trait = education_stewardship_4 + has_trait = education_stewardship_5 + } + } + } + AND = { + OR = { + has_trait = education_martial_1 + has_trait = education_martial_2 + has_trait = education_martial_3 + has_trait = education_martial_4 + has_trait = education_martial_5 + } + scope:compare_character = { + OR = { + has_trait = education_martial_1 + has_trait = education_martial_2 + has_trait = education_martial_3 + has_trait = education_martial_4 + has_trait = education_martial_5 + } + } + } + AND = { + OR = { + has_trait = education_learning_1 + has_trait = education_learning_2 + has_trait = education_learning_3 + has_trait = education_learning_4 + has_trait = education_learning_5 + } + scope:compare_character = { + OR = { + has_trait = education_learning_1 + has_trait = education_learning_2 + has_trait = education_learning_3 + has_trait = education_learning_4 + has_trait = education_learning_5 + } + } + } + } +} + + +has_same_education_as_root_trigger = { + OR = { + AND = { + OR = { + has_trait = education_intrigue_1 + has_trait = education_intrigue_2 + has_trait = education_intrigue_3 + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + } + root = { + OR = { + has_trait = education_intrigue_1 + has_trait = education_intrigue_2 + has_trait = education_intrigue_3 + has_trait = education_intrigue_4 + has_trait = education_intrigue_5 + } + } + } + AND = { + OR = { + has_trait = education_diplomacy_1 + has_trait = education_diplomacy_2 + has_trait = education_diplomacy_3 + has_trait = education_diplomacy_4 + has_trait = education_diplomacy_5 + } + root = { + OR = { + has_trait = education_diplomacy_1 + has_trait = education_diplomacy_2 + has_trait = education_diplomacy_3 + has_trait = education_diplomacy_4 + has_trait = education_diplomacy_5 + } + } + } + AND = { + OR = { + has_trait = education_stewardship_1 + has_trait = education_stewardship_2 + has_trait = education_stewardship_3 + has_trait = education_stewardship_4 + has_trait = education_stewardship_5 + } + root = { + OR = { + has_trait = education_stewardship_1 + has_trait = education_stewardship_2 + has_trait = education_stewardship_3 + has_trait = education_stewardship_4 + has_trait = education_stewardship_5 + } + } + } + AND = { + OR = { + has_trait = education_martial_1 + has_trait = education_martial_2 + has_trait = education_martial_3 + has_trait = education_martial_4 + has_trait = education_martial_5 + } + root = { + OR = { + has_trait = education_martial_1 + has_trait = education_martial_2 + has_trait = education_martial_3 + has_trait = education_martial_4 + has_trait = education_martial_5 + } + } + } + AND = { + OR = { + has_trait = education_learning_1 + has_trait = education_learning_2 + has_trait = education_learning_3 + has_trait = education_learning_4 + has_trait = education_learning_5 + } + root = { + OR = { + has_trait = education_learning_1 + has_trait = education_learning_2 + has_trait = education_learning_3 + has_trait = education_learning_4 + has_trait = education_learning_5 + } + } + } + } +} + +has_same_lifestyle_as_compare_character_trigger = { + OR = { + AND = { + has_trait = diplomat + scope:compare_character = { has_trait = diplomat } + } + AND = { + has_trait = lifestyle_reveler + scope:compare_character = { has_trait = lifestyle_reveler } + } + AND = { + has_trait = lifestyle_blademaster + scope:compare_character = { has_trait = lifestyle_blademaster } + } + AND = { + has_trait = lifestyle_hunter + scope:compare_character = { has_trait = lifestyle_hunter } + } + AND = { + has_trait = strategist + scope:compare_character = { has_trait = strategist } + } + AND = { + has_trait = architect + scope:compare_character = { has_trait = architect } + } + AND = { + has_intrigue_lifestyle_trait_trigger = yes + scope:compare_character = { has_intrigue_lifestyle_trait_trigger = yes } + } + AND = { + has_trait = seducer + scope:compare_character = { has_trait = seducer } + } + AND = { + has_trait = celibate + scope:compare_character = { has_trait = celibate } + } + AND = { + has_learning_lifestyle_trait_trigger = yes + scope:compare_character = { has_learning_lifestyle_trait_trigger = yes } + } + AND = { + has_trait = family_first + scope:compare_character = { has_trait = family_first } + } + AND = { + has_trait = sadistic + scope:compare_character = { has_trait = sadistic } + } + AND = { + has_trait = lunatic + scope:compare_character = { has_trait = lunatic } + } + } +} + +has_same_lifestyle_as_root_trigger = { + OR = { + AND = { + has_trait = diplomat + root = { has_trait = diplomat } + } + AND = { + has_trait = lifestyle_reveler + root = { has_trait = lifestyle_reveler } + } + AND = { + has_trait = lifestyle_blademaster + root = { has_trait = lifestyle_blademaster } + } + AND = { + has_trait = lifestyle_hunter + root = { has_trait = lifestyle_hunter } + } + AND = { + has_trait = strategist + root = { has_trait = strategist } + } + AND = { + has_trait = architect + root = { has_trait = architect } + } + AND = { + has_intrigue_lifestyle_trait_trigger = yes + root = { has_intrigue_lifestyle_trait_trigger = yes } + } + AND = { + has_trait = seducer + root = { has_trait = seducer } + } + AND = { + has_trait = celibate + root = { has_trait = celibate } + } + AND = { + has_learning_lifestyle_trait_trigger = yes + root = { has_learning_lifestyle_trait_trigger = yes } + } + AND = { + has_trait = family_first + root = { has_trait = family_first } + } + AND = { + has_trait = sadistic + root = { has_trait = sadistic } + } + AND = { + has_trait = lunatic + root = { has_trait = lunatic } + } + } +} + +has_same_fame_as_compare_character_trigger = { + OR = { + AND = { + has_trait = berserker + scope:compare_character = { has_trait = berserker } + } + AND = { + OR = { + has_trait = bastard + has_trait = legitimized_bastard + } + scope:compare_character = { + has_trait = bastard + has_trait = legitimized_bastard + } + } + AND = { + has_trait = kinslayer + scope:compare_character = { has_trait = kinslayer } + } + AND = { + has_trait = sodomite + scope:compare_character = { has_trait = sodomite } + OR = { + AND = { + is_female = yes + scope:compare_character = { is_female = yes } + } + AND = { + is_female = no + scope:compare_character = { is_female = no } + } + } + } + AND = { + has_trait = deviant + scope:compare_character = { has_trait = deviant } + } + AND = { + has_trait = viking + scope:compare_character = { has_trait = viking } + } + AND = { + has_trait = adventurer + scope:compare_character = { has_trait = adventurer } + } + AND = { + has_trait = lunatic + scope:compare_character = { has_trait = lunatic } + } + AND = { + has_trait = incestuous + scope:compare_character = { has_trait = incestuous } + } + } +} + +has_same_fame_as_root_trigger = { + OR = { + AND = { + has_trait = berserker + root = { has_trait = berserker } + } + AND = { + OR = { + has_trait = bastard + has_trait = legitimized_bastard + } + root = { + has_trait = bastard + has_trait = legitimized_bastard + } + } + AND = { + has_trait = kinslayer + root = { has_trait = kinslayer } + } + AND = { + has_sexuality = homosexual + root = { has_sexuality = homosexual } + OR = { + AND = { + is_female = yes + root = { is_female = yes } + } + AND = { + is_female = no + root = { is_female = no } + } + } + } + AND = { + has_trait = deviant + root = { has_trait = deviant } + } + AND = { + has_trait = viking + root = { has_trait = viking } + } + AND = { + has_trait = adventurer + root = { has_trait = adventurer } + } + AND = { + has_trait = lunatic + root = { has_trait = lunatic } + } + } +} + +has_a_personality_trait_in_common_with_root_trigger = { + OR = { + AND = { + has_trait = chaste + root = { has_trait = chaste } + } + AND = { + has_trait = lustful + root = { has_trait = lustful } + } + AND = { + has_trait = temperate + root = { has_trait = temperate } + } + AND = { + has_trait = gluttonous + root = { has_trait = gluttonous } + } + AND = { + has_trait = generous + root = { has_trait = generous } + } + AND = { + has_trait = greedy + root = { has_trait = greedy } + } + AND = { + has_trait = diligent + root = { has_trait = diligent } + } + AND = { + has_trait = lazy + root = { has_trait = lazy } + } + AND = { + has_trait = wrathful + root = { has_trait = wrathful } + } + AND = { + has_trait = calm + root = { has_trait = calm } + } + AND = { + has_trait = impatient + root = { has_trait = impatient } + } + AND = { + has_trait = patient + root = { has_trait = patient } + } + AND = { + has_trait = stubborn + root = { has_trait = stubborn } + } + AND = { + has_trait = fickle + root = { has_trait = fickle } + } + AND = { + has_trait = humble + root = { has_trait = humble } + } + AND = { + has_trait = arrogant + root = { has_trait = arrogant } + } + AND = { + has_trait = deceitful + root = { has_trait = deceitful } + } + AND = { + has_trait = honest + root = { has_trait = honest } + } + AND = { + has_trait = craven + root = { has_trait = craven } + } + AND = { + has_trait = brave + root = { has_trait = brave } + } + AND = { + has_trait = shy + root = { has_trait = shy } + } + AND = { + has_trait = gregarious + root = { has_trait = gregarious } + } + AND = { + has_trait = ambitious + root = { has_trait = ambitious } + } + AND = { + has_trait = content + root = { has_trait = content } + } + AND = { + has_trait = arbitrary + root = { has_trait = arbitrary } + } + AND = { + has_trait = just + root = { has_trait = just } + } + AND = { + has_trait = cynical + root = { has_trait = cynical } + } + AND = { + has_trait = zealous + root = { has_trait = zealous } + } + AND = { + has_trait = paranoid + root = { has_trait = paranoid } + } + AND = { + has_trait = trusting + root = { has_trait = trusting } + } + AND = { + has_trait = compassionate + root = { has_trait = compassionate } + } + AND = { + has_trait = callous + root = { has_trait = callous } + } + AND = { + has_trait = sadistic + root = { has_trait = sadistic } + } + AND = { + has_trait = vengeful + root = { has_trait = vengeful } + } + AND = { + has_trait = forgiving + root = { has_trait = forgiving } + } + AND = { + has_trait = eccentric + root = { has_trait = eccentric } + } + } +} + +has_a_personality_trait_opposite_to_root_trigger = { + OR = { + AND = { + has_trait = chaste + root = { has_trait = lustful } + } + AND = { + has_trait = lustful + root = { has_trait = chaste } + } + AND = { + has_trait = temperate + root = { has_trait = gluttonous } + } + AND = { + has_trait = gluttonous + root = { has_trait = temperate } + } + AND = { + has_trait = generous + root = { has_trait = greedy } + } + AND = { + has_trait = greedy + root = { has_trait = generous } + } + AND = { + has_trait = diligent + root = { has_trait = lazy } + } + AND = { + has_trait = lazy + root = { has_trait = diligent } + } + AND = { + has_trait = wrathful + root = { has_trait = calm } + } + AND = { + has_trait = calm + root = { has_trait = wrathful } + } + AND = { + has_trait = impatient + root = { has_trait = patient } + } + AND = { + has_trait = patient + root = { has_trait = impatient } + } + AND = { + has_trait = stubborn + root = { + OR = { + has_trait = fickle + has_trait = eccentric + } + } + } + AND = { + OR = { + has_trait = fickle + has_trait = eccentric + } + root = { has_trait = stubborn } + } + AND = { + has_trait = humble + root = { has_trait = arrogant } + } + AND = { + has_trait = arrogant + root = { has_trait = humble } + } + AND = { + has_trait = deceitful + root = { has_trait = honest } + } + AND = { + has_trait = honest + root = { has_trait = deceitful } + } + AND = { + has_trait = craven + root = { has_trait = brave } + } + AND = { + has_trait = brave + root = { has_trait = craven } + } + AND = { + has_trait = shy + root = { has_trait = gregarious } + } + AND = { + has_trait = gregarious + root = { has_trait = shy } + } + AND = { + has_trait = ambitious + root = { has_trait = content } + } + AND = { + has_trait = content + root = { has_trait = ambitious } + } + AND = { + has_trait = arbitrary + root = { has_trait = just } + } + AND = { + has_trait = just + root = { has_trait = arbitrary } + } + AND = { + has_trait = cynical + root = { has_trait = zealous } + } + AND = { + has_trait = zealous + root = { has_trait = cynical } + } + AND = { + has_trait = paranoid + root = { has_trait = trusting } + } + AND = { + has_trait = trusting + root = { has_trait = paranoid } + } + AND = { + has_trait = compassionate + root = { + OR = { + has_trait = callous + has_trait = sadistic + } + } + } + AND = { + has_trait = callous + root = { has_trait = compassionate } + } + AND = { + has_trait = sadistic + root = { has_trait = compassionate } + } + AND = { + has_trait = vengeful + root = { has_trait = forgiving } + } + AND = { + has_trait = forgiving + root = { has_trait = vengeful } + } + } +} + +has_a_personality_trait_in_common_with_compare_character_trigger = { + OR = { + AND = { + has_trait = chaste + scope:compare_character = { has_trait = chaste } + } + AND = { + has_trait = lustful + scope:compare_character = { has_trait = lustful } + } + AND = { + has_trait = temperate + scope:compare_character = { has_trait = temperate } + } + AND = { + has_trait = gluttonous + scope:compare_character = { has_trait = gluttonous } + } + AND = { + has_trait = generous + scope:compare_character = { has_trait = generous } + } + AND = { + has_trait = greedy + scope:compare_character = { has_trait = greedy } + } + AND = { + has_trait = diligent + scope:compare_character = { has_trait = diligent } + } + AND = { + has_trait = lazy + scope:compare_character = { has_trait = lazy } + } + AND = { + has_trait = wrathful + scope:compare_character = { has_trait = wrathful } + } + AND = { + has_trait = calm + scope:compare_character = { has_trait = calm } + } + AND = { + has_trait = impatient + scope:compare_character = { has_trait = impatient } + } + AND = { + has_trait = patient + scope:compare_character = { has_trait = patient } + } + AND = { + has_trait = stubborn + scope:compare_character = { has_trait = stubborn } + } + AND = { + has_trait = fickle + scope:compare_character = { has_trait = fickle } + } + AND = { + has_trait = humble + scope:compare_character = { has_trait = humble } + } + AND = { + has_trait = arrogant + scope:compare_character = { has_trait = arrogant } + } + AND = { + has_trait = deceitful + scope:compare_character = { has_trait = deceitful } + } + AND = { + has_trait = honest + scope:compare_character = { has_trait = honest } + } + AND = { + has_trait = craven + scope:compare_character = { has_trait = craven } + } + AND = { + has_trait = brave + scope:compare_character = { has_trait = brave } + } + AND = { + has_trait = shy + scope:compare_character = { has_trait = shy } + } + AND = { + has_trait = gregarious + scope:compare_character = { has_trait = gregarious } + } + AND = { + has_trait = ambitious + scope:compare_character = { has_trait = ambitious } + } + AND = { + has_trait = content + scope:compare_character = { has_trait = content } + } + AND = { + has_trait = arbitrary + scope:compare_character = { has_trait = arbitrary } + } + AND = { + has_trait = just + scope:compare_character = { has_trait = just } + } + AND = { + has_trait = cynical + scope:compare_character = { has_trait = cynical } + } + AND = { + has_trait = zealous + scope:compare_character = { has_trait = zealous } + } + AND = { + has_trait = paranoid + scope:compare_character = { has_trait = paranoid } + } + AND = { + has_trait = trusting + scope:compare_character = { has_trait = trusting } + } + AND = { + has_trait = compassionate + scope:compare_character = { has_trait = compassionate } + } + AND = { + has_trait = callous + scope:compare_character = { has_trait = callous } + } + AND = { + has_trait = sadistic + scope:compare_character = { has_trait = sadistic } + } + AND = { + has_trait = vengeful + scope:compare_character = { has_trait = vengeful } + } + AND = { + has_trait = forgiving + scope:compare_character = { has_trait = forgiving } + } + } +} + +has_a_personality_trait_opposite_to_compare_character_trigger = { + OR = { + AND = { + has_trait = chaste + scope:compare_character = { has_trait = lustful } + } + AND = { + has_trait = lustful + scope:compare_character = { has_trait = chaste } + } + AND = { + has_trait = temperate + scope:compare_character = { has_trait = gluttonous } + } + AND = { + has_trait = gluttonous + scope:compare_character = { has_trait = temperate } + } + AND = { + has_trait = generous + scope:compare_character = { has_trait = greedy } + } + AND = { + has_trait = greedy + scope:compare_character = { has_trait = generous } + } + AND = { + has_trait = diligent + scope:compare_character = { has_trait = lazy } + } + AND = { + has_trait = lazy + scope:compare_character = { has_trait = diligent } + } + AND = { + has_trait = wrathful + scope:compare_character = { has_trait = calm } + } + AND = { + has_trait = calm + scope:compare_character = { has_trait = wrathful } + } + AND = { + has_trait = impatient + scope:compare_character = { has_trait = patient } + } + AND = { + has_trait = patient + scope:compare_character = { has_trait = impatient } + } + AND = { + has_trait = stubborn + scope:compare_character = { has_trait = fickle } + } + AND = { + has_trait = fickle + scope:compare_character = { has_trait = stubborn } + } + AND = { + has_trait = humble + scope:compare_character = { has_trait = arrogant } + } + AND = { + has_trait = arrogant + scope:compare_character = { has_trait = humble } + } + AND = { + has_trait = deceitful + scope:compare_character = { has_trait = honest } + } + AND = { + has_trait = honest + scope:compare_character = { has_trait = deceitful } + } + AND = { + has_trait = craven + scope:compare_character = { has_trait = brave } + } + AND = { + has_trait = brave + scope:compare_character = { has_trait = craven } + } + AND = { + has_trait = shy + scope:compare_character = { has_trait = gregarious } + } + AND = { + has_trait = gregarious + scope:compare_character = { has_trait = shy } + } + AND = { + has_trait = ambitious + scope:compare_character = { has_trait = content } + } + AND = { + has_trait = content + scope:compare_character = { has_trait = ambitious } + } + AND = { + has_trait = arbitrary + scope:compare_character = { has_trait = just } + } + AND = { + has_trait = just + scope:compare_character = { has_trait = arbitrary } + } + AND = { + has_trait = cynical + scope:compare_character = { has_trait = zealous } + } + AND = { + has_trait = zealous + scope:compare_character = { has_trait = cynical } + } + AND = { + has_trait = paranoid + scope:compare_character = { has_trait = trusting } + } + AND = { + has_trait = trusting + scope:compare_character = { has_trait = paranoid } + } + AND = { + has_trait = compassionate + scope:compare_character = { + OR = { + has_trait = callous + has_trait = sadistic + } + } + } + AND = { + has_trait = callous + scope:compare_character = { has_trait = compassionate } + } + AND = { + has_trait = sadistic + scope:compare_character = { has_trait = compassionate } + } + AND = { + has_trait = vengeful + scope:compare_character = { has_trait = forgiving } + } + AND = { + has_trait = forgiving + scope:compare_character = { has_trait = vengeful } + } + } +} + +has_same_education_trait_as_root_trigger = { + OR = { + AND = { + has_trait = education_diplomacy + root = { has_trait = education_diplomacy } + } + AND = { + has_trait = education_martial + root = { has_trait = education_martial } + } + AND = { + has_trait = education_stewardship + root = { has_trait = education_stewardship } + } + AND = { + has_trait = education_intrigue + root = { has_trait = education_intrigue } + } + AND = { + has_trait = education_learning + root = { has_trait = education_learning } + } + } +} + +has_same_education_trait_as_character_trigger = { + OR = { + AND = { + has_trait = education_diplomacy + $CHARACTER$ = { has_trait = education_diplomacy } + } + AND = { + has_trait = education_martial + $CHARACTER$ = { has_trait = education_martial } + } + AND = { + has_trait = education_stewardship + $CHARACTER$ = { has_trait = education_stewardship } + } + AND = { + has_trait = education_intrigue + $CHARACTER$ = { has_trait = education_intrigue } + } + AND = { + has_trait = education_learning + $CHARACTER$ = { has_trait = education_learning } + } + } +} + + +has_diplomacy_lifestyle_trait_trigger = { + OR = { + has_trait = diplomat + has_trait = august + has_trait = family_first + } +} + +has_martial_lifestyle_trait_trigger = { + OR = { + has_trait = strategist + has_trait = overseer + has_trait = gallant + } +} + +has_stewardship_lifestyle_trait_trigger = { + OR = { + has_trait = architect + has_trait = administrator + has_trait = avaricious + } +} + +has_intrigue_lifestyle_trait_trigger = { + OR = { + has_trait = schemer + has_trait = seducer + has_trait = torturer + } +} + +has_learning_lifestyle_trait_trigger = { + OR = { + has_trait = scholar + has_trait = whole_of_body + has_trait = theologian + } +} + +has_special_content_trait = { + OR = { + is_cannibal_trigger = yes + is_witch_trigger = yes + is_deviant_trigger = yes + is_incestuous_trigger = yes + has_trait = lifestyle_reveler + has_trait = lifestyle_blademaster + has_trait = lifestyle_hunter + has_trait = lifestyle_mystic + has_trait = lifestyle_herbalist + has_trait = drunkard + has_trait = lunatic + has_trait = depressed + has_trait = possessed + } +} + +has_lifestyle_trait = { + OR = { + has_trait = lifestyle_reveler + has_trait = lifestyle_blademaster + has_trait = lifestyle_hunter + has_trait = lifestyle_mystic + has_trait = lifestyle_herbalist + has_trait = lifestyle_physician + } +} + +has_ward_guardian_education_match_compare_character_trigger = { + OR = { + AND = { + has_focus = education_diplomacy + scope:compare_character = { + OR = { + has_trait = education_diplomacy_1 + has_trait = education_diplomacy_2 + has_trait = education_diplomacy_3 + has_trait = education_diplomacy_4 + } + } + } + AND = { + has_focus = education_martial + scope:compare_character = { + OR = { + has_trait = education_martial_1 + has_trait = education_martial_2 + has_trait = education_martial_3 + has_trait = education_martial_4 + } + } + } + AND = { + has_focus = education_stewardship + scope:compare_character = { + OR = { + has_trait = education_stewardship_1 + has_trait = education_stewardship_2 + has_trait = education_stewardship_3 + has_trait = education_stewardship_4 + } + } + } + AND = { + has_focus = education_intrigue + scope:compare_character = { + OR = { + has_trait = education_intrigue_1 + has_trait = education_intrigue_2 + has_trait = education_intrigue_3 + has_trait = education_intrigue_4 + } + } + } + AND = { + has_focus = education_learning + scope:compare_character = { + OR = { + has_trait = education_learning_1 + has_trait = education_learning_2 + has_trait = education_learning_3 + has_trait = education_learning_4 + } + } + } + } +} + +has_any_high_skill_rating = { + OR = { + diplomacy >= high_skill_rating + intrigue >= high_skill_rating + prowess >= high_skill_rating + learning >= high_skill_rating + martial >= high_skill_rating + stewardship >= high_skill_rating + } +} \ No newline at end of file diff --git a/common/scripted_triggers/00_generic_event_sensibility_triggers.txt b/common/scripted_triggers/00_generic_event_sensibility_triggers.txt new file mode 100644 index 00000000..388dea5c --- /dev/null +++ b/common/scripted_triggers/00_generic_event_sensibility_triggers.txt @@ -0,0 +1,259 @@ +########################### +# These triggers are designed for use in generic event content: +# They are very restrictive, and designed to, as much as possible, not break immersion. +# Use them where you can, but be aware that they will make event triggers very strict +########################### + +###### LOVER TRIGGERS ##### + +###### +# are_characters_sensible_and_appropriate_open_lovers_trigger = { INSTIGATING_LOVER = scope:something TARGET_OF_LOVE = scope:something_else } +# This is the most restrictive form of lover trigger, +# use it when you need a couple of innocent lovers + +###### +# are_characters_sensible_and_appropriate_lovers_trigger = { INSTIGATING_LOVER = scope:something TARGET_OF_LOVE = scope:something_else } +# Is the pairing both sensible from an attraction standpoint, +# and appropriate from a social standpoint? + +###### +# are_characters_sensible_lovers_trigger = { INSTIGATING_LOVER = scope:something TARGET_OF_LOVE = scope:something_else } +# Is the pairing sensible from an attraction standpoint? +# Does not restrict based on genetic bad looks, +# this is about the _lover_ status, not attraction-based sex + + +# Would two characters fancy each other somewhat? +are_characters_sensible_lovers_trigger = { + $INSTIGATING_LOVER$ = { save_temporary_scope_as = instigating_character } + $TARGET_OF_LOVE$ = { save_temporary_scope_as = target_of_love } + + scope:instigating_character = { + NOT = { this = scope:target_of_love } + is_physically_able_adult = yes + might_cheat_on_every_partner_trigger = yes + can_set_relation_lover_trigger = { CHARACTER = scope:target_of_love } + is_attracted_to_gender_of = scope:target_of_love + NOR = { + has_trait = chaste + has_trait = celibate + has_sexuality = asexual + has_trait = beardless_eunuch + has_trait = leper + has_trait = great_pox + has_trait = bubonic_plague + has_trait = smallpox + has_trait = measles + has_trait = ergotism + has_trait = dysentery + has_trait = consumption + has_trait = typhus + has_trait = pneumonic + } + # These three only need to be checked on one char + age <= scope:target_of_love.age_plus_10 + age >= scope:target_of_love.age_minus_10 + trait_compatibility = { + target = scope:target_of_love + value >= low_positive_trait_compatibility + } + } + + scope:target_of_love = { + NOT = { this = scope:instigating_character } + might_cheat_on_every_partner_trigger = yes + can_set_relation_lover_trigger = { CHARACTER = scope:instigating_character } + is_attracted_to_gender_of = scope:instigating_character + NOR = { + has_trait = chaste + has_trait = celibate + has_sexuality = asexual + has_trait = beardless_eunuch + has_trait = leper + has_trait = great_pox + has_trait = bubonic_plague + has_trait = smallpox + has_trait = measles + has_trait = ergotism + has_trait = dysentery + has_trait = consumption + has_trait = typhus + has_trait = pneumonic + } + } + + accepts_incest_with_each_other_trigger = { + CHARACTER_1 = scope:instigating_character + CHARACTER_2 = scope:target_of_love + } +} + +# Various social blockers - what would you, interpreting society, think of having a lover +are_characters_sensible_and_appropriate_lovers_trigger = { + $INSTIGATING_LOVER$ = { save_temporary_scope_as = instigating_character } + $TARGET_OF_LOVE$ = { save_temporary_scope_as = target_of_love } + + are_characters_sensible_lovers_trigger = { + INSTIGATING_LOVER = scope:instigating_character + TARGET_OF_LOVE = scope:target_of_love + } + + scope:instigating_character = { + OR = { + has_trait = lustful + any_relation = { + type = lover + count < 1 + } + } + trigger_if = { + limit = { + is_clergy = yes + } + faith = { + has_doctrine_parameter = clergy_can_marry + } + } + trigger_if = { + limit = { + is_courtier = yes + is_close_or_extended_family_of = liege + has_no_particular_noble_roots_trigger = no + } + OR = { + scope:target_of_love = { has_no_particular_noble_roots_trigger = no } + is_deviant_trigger = yes + has_trait = lustful + trait_compatibility = { + target = scope:target_of_love + value >= high_positive_trait_compatibility + } + } + } + trigger_if = { + limit = { + OR = { + faith = { + has_doctrine_parameter = homosexuality_shunned + } + liege.faith ?= { + has_doctrine_parameter = homosexuality_shunned + } + faith = { + has_doctrine_parameter = homosexuality_illegal + } + liege.faith ?= { + has_doctrine_parameter = homosexuality_illegal + } + } + } + NOR = { + AND = { + is_female = yes + scope:target_of_love = { is_female = yes } + } + AND = { + is_male = yes + scope:target_of_love = { is_male = yes } + } + } + } + } + + scope:target_of_love = { + OR = { + has_trait = lustful + any_relation = { + type = lover + count < 1 + } + } + trigger_if = { + limit = { + is_clergy = yes + } + faith = { + has_doctrine_parameter = clergy_can_marry + } + } + trigger_if = { + limit = { + is_courtier = yes + is_close_or_extended_family_of = liege + has_no_particular_noble_roots_trigger = no + } + OR = { + scope:instigating_character = { has_no_particular_noble_roots_trigger = no } + is_deviant_trigger = yes + has_trait = lustful + trait_compatibility = { + target = scope:instigating_character + value >= high_positive_trait_compatibility + } + } + } + trigger_if = { + limit = { + OR = { + faith = { + has_doctrine_parameter = homosexuality_shunned + } + liege.faith ?= { + has_doctrine_parameter = homosexuality_shunned + } + faith = { + has_doctrine_parameter = homosexuality_illegal + } + liege.faith ?= { + has_doctrine_parameter = homosexuality_illegal + } + } + } + NOR = { + AND = { + is_female = yes + scope:target_of_love = { is_female = yes } + } + AND = { + is_male = yes + scope:target_of_love = { is_male = yes } + } + } + } + } +} + +# Would the characters make sense as lovers within the context of their social situation +are_characters_sensible_and_appropriate_open_lovers_trigger = { + $INSTIGATING_LOVER$ = { save_temporary_scope_as = instigating_character } + $TARGET_OF_LOVE$ = { save_temporary_scope_as = target_of_love } + + scope:instigating_character = { + trigger_if = { + limit = { + NOT = { + is_consort_of = scope:target_of_love + } + } + is_married = no + is_concubine = no + } + } + + scope:target_of_love = { + trigger_if = { + limit = { + NOT = { + is_consort_of = scope:instigating_character + } + } + is_married = no + is_concubine = no + } + } + + are_characters_sensible_and_appropriate_lovers_trigger = { + INSTIGATING_LOVER = scope:instigating_character + TARGET_OF_LOVE = scope:target_of_love + } +} \ No newline at end of file diff --git a/common/scripted_triggers/00_generic_struggle_scripted_triggers.txt b/common/scripted_triggers/00_generic_struggle_scripted_triggers.txt new file mode 100644 index 00000000..2782f446 --- /dev/null +++ b/common/scripted_triggers/00_generic_struggle_scripted_triggers.txt @@ -0,0 +1,508 @@ + +################################################## +# Debug Triggers + +# Do we want to gather global variable tallies for the Persian struggle? +## Toggled off for release, toggle back on to check how often we change phases & which catalysts are firing. +gather_debug_variables_for_persian_struggle_trigger = { always = no } + +################################################## +# General Triggers +## Miscellaneous assorted triggers related to bits of neutral struggle content. + +# Characters of some note within the struggle. +is_important_struggle_character = { + highest_held_title_tier = tier_duchy +} + +# Characters who are very important within the struggle (generally enough that they matter for catalysts). +is_vip_struggle_character = { + OR = { + highest_held_title_tier >= tier_kingdom + AND = { + exists = faith.religious_head + this = faith.religious_head + } + this = culture.culture_head + } +} + +is_important_or_vip_struggle_character = { + OR = { + is_important_struggle_character = yes + is_vip_struggle_character = yes + } +} + +is_semi_important_ruler_struggle_character = { + OR = { + highest_held_title_tier >= tier_county + is_important_or_vip_struggle_character = yes + } +} + +is_secondary_character_involvement_involved_trigger = { + save_temporary_scope_as = struggle_temp + $CHAR$ = { + any_character_struggle = { + involvement = involved + this = scope:struggle_temp + } + } +} + +is_secondary_character_involvement_interloper_trigger = { + save_temporary_scope_as = struggle_temp + $CHAR$ = { + any_character_struggle = { + involvement = interloper + this = scope:struggle_temp + } + } +} + +is_secondary_character_involvement_either_trigger = { + save_temporary_scope_as = struggle_temp + $CHAR$ = { + any_character_struggle = { this = scope:struggle_temp } + } +} + +is_secondary_character_involvement_neither_trigger = { + save_temporary_scope_as = struggle_temp + $CHAR$ = { + NOT = { + any_character_struggle = { this = scope:struggle_temp } + } + } +} + +is_diff_faith_or_culture_trigger = { + NAND = { + culture = $CHAR$.culture + faith = $CHAR$.faith + } + $CHAR$ = { any_character_struggle = { involvement = $STATUS$ } } + # Removed the check for what struggle it is +} + +is_same_faith_or_culture_trigger = { + OR = { + culture = $CHAR$.culture + faith = $CHAR$.faith + } + $CHAR$ = { any_character_struggle = { involvement = $STATUS$ } } + # Removed the check for what struggle it is +} + +is_same_culture_trigger = { + culture = $CHAR$.culture + $CHAR$ = { any_character_struggle = { involvement = $STATUS$ } } + # Removed the check for what struggle it is +} + +is_same_faith_trigger = { + culture = $CHAR$.culture + $CHAR$ = { any_character_struggle = { involvement = $STATUS$ } } + # Removed the check for what struggle it is +} + +################################################## +# Catalyst Phase Triggers +## Should a catalyst be activating in this phase? +### Remember, that means it should activate in the phase _before_ the one that has it as a valid transitionary catalyst. + + +################################################## +# Catalyst Triggers +## Some common rump triggers used in catalysts activation, plus preliminaries for catalysts triggered in multiple locations. + +catalyst_gave_independence_to_powerful_diff_faith_culture_vassal_preliminary_trigger = { + $CHAR1$ = { + NAND = { + culture = $CHAR2$.culture + faith = $CHAR2$.faith + } + } + $CHAR2$ = { is_powerful_vassal_of = $CHAR1$ } +} + +catalyst_granted_powerful_diff_faith_vassal_religious_protection_preliminary_trigger = { + $CHAR$ = { + any_in_list = { + list = changed_obligations + vassal_contract_type = { + OR = { + this = vassal_contract:religious_rights + this = vassal_contract:jizya_special_rights + } + } + obligation_level_score >= 1 + } + is_powerful_vassal = yes + } +} + +catalyst_revoked_powerful_diff_faith_vassal_religious_protection_preliminary_trigger = { + $CHAR$ = { + any_in_list = { + list = changed_obligations + vassal_contract_type = { + OR = { + this = vassal_contract:religious_rights + this = vassal_contract:jizya_special_rights + } + } + obligation_level_score >= 1 + } + is_powerful_vassal = yes + } +} + +catalyst_hybridise_or_diverge_regional_cultures_preliminary_trigger = { + phase_has_catalyst = catalyst_hybridise_or_diverge_regional_cultures + save_temporary_scope_as = struggle_temp + OR = { + AND = { + exists = scope:parent_culture_2 + scope:struggle_temp = { + is_culture_involved_in_struggle = scope:parent_culture_1 + is_culture_involved_in_struggle = scope:parent_culture_2 + } + } + is_culture_involved_in_struggle = scope:parent_culture_1 + } +} + +catalyst_very_important_child_change_culture_or_faith_preliminary_trigger = { + any_character_struggle = { + phase_has_catalyst = catalyst_very_important_child_change_culture_or_faith + } + is_adult = no + any_parent = { + any_character_struggle ={ + involvement = involved + } + is_vip_struggle_character = yes + } +} + +activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + phase_has_catalyst = $CATALYST$ + save_temporary_scope_as = struggle_temp + $CHAR$ = { + any_character_struggle = { + involvement = involved + this = scope:struggle_temp + } + } +} + +activate_struggle_catalyst_secondary_character_involvement_interloper_trigger = { + phase_has_catalyst = $CATALYST$ + save_temporary_scope_as = struggle_temp + $CHAR$ = { + any_character_struggle = { + involvement = interloper + this = scope:struggle_temp + } + } +} + +activate_struggle_catalyst_secondary_character_involvement_either_trigger = { + phase_has_catalyst = $CATALYST$ + save_temporary_scope_as = struggle_temp + $CHAR$ = { + any_character_struggle = { this = scope:struggle_temp } + } +} + +activate_struggle_catalyst_secondary_character_involvement_neither_trigger = { + phase_has_catalyst = $CATALYST$ + save_temporary_scope_as = struggle_temp + $CHAR$ = { + NOT = { + any_character_struggle = { this = scope:struggle_temp } + } + } +} + +activate_struggle_catalyst_secondary_character_involvement_interloper_or_uninvolved_trigger = { + phase_has_catalyst = $CATALYST$ + save_temporary_scope_as = struggle_temp + $CHAR$ = { + OR = { + any_character_struggle = { + involvement = interloper + this = scope:struggle_temp + } + NOT = { + any_character_struggle = { this = scope:struggle_temp } + } + } + } +} + +activate_struggle_catalyst_warfare_check_attacker_involvement_trigger = { + phase_has_catalyst = $CATALYST$ + save_temporary_scope_as = struggle_temp + $VAR_SCOPE$ = { + trigger_if = { + limit = { scope:attacker = scope:loser } + has_variable = struggle_involvement_attacker + has_variable = struggle_scope_attacker + var:struggle_involvement_attacker = flag:$INVOLVEMENT$ + var:struggle_scope_attacker = scope:struggle_temp + } + trigger_else = { + has_variable = struggle_involvement_defender + has_variable = struggle_scope_defender + var:struggle_involvement_defender = flag:$INVOLVEMENT$ + var:struggle_scope_defender = scope:struggle_temp + } + } +} + +################################################## +# Parameter Triggers +## If a parameter is triggered in multiple places, we use a scripted trigger to keep things unified. + +is_struggle_parameter_active_interfaith_marriages_available_between_involved_characters_trigger = { + scope:actor = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = interfaith_marriages_available_between_involved_characters + save_temporary_scope_as = struggle_temp + scope:recipient = { + any_character_struggle = { + involvement = involved + this = scope:struggle_temp + } + } + } + } +} + +is_struggle_parameter_active_cheaper_to_convert_to_struggle_culture_trigger = { + capital_county = { + any_county_struggle = { has_struggle_phase_parameter = cheaper_to_convert_to_struggle_culture } + } +} + +is_struggle_parameter_active_secondary_character_involvement_involved_trigger = { + has_struggle_phase_parameter = $PARAMETER$ + save_temporary_scope_as = struggle_temp + $CHAR$ = { + any_character_struggle = { + involvement = involved + this = scope:struggle_temp + } + } +} + +is_struggle_parameter_active_secondary_character_involvement_interloper_trigger = { + has_struggle_phase_parameter = $PARAMETER$ + save_temporary_scope_as = struggle_temp + $CHAR$ = { + any_character_struggle = { + involvement = interloper + this = scope:struggle_temp + } + } +} + +is_struggle_parameter_active_secondary_character_involvement_either_trigger = { + has_struggle_phase_parameter = $PARAMETER$ + save_temporary_scope_as = struggle_temp + $CHAR$ = { + any_character_struggle = { this = scope:struggle_temp } + } +} + +is_struggle_parameter_active_secondary_character_involvement_neither_trigger = { + has_struggle_phase_parameter = $PARAMETER$ + save_temporary_scope_as = struggle_temp + $CHAR$ = { + NOT = { + any_character_struggle = { this = scope:struggle_temp } + } + } +} + +is_struggle_parameter_active_secondary_county_trigger = { + has_struggle_phase_parameter = $PARAMETER$ + save_temporary_scope_as = struggle_temp + $COUNTY$ = { + any_county_struggle = { this = scope:struggle_temp } + } +} + +is_struggle_parameter_active_variable_cb_target_secondary_county_trigger = { + has_struggle_phase_parameter = $PARAMETER$ + save_temporary_scope_as = struggle_temp + any_in_list = { + list = target_titles + count >= 1 + tier = tier_county + any_county_struggle = { this = scope:struggle_temp } + } +} + +################################################## +# Casus Belli Triggers +## Struggle triggers related to wars & similar. + +# Is the scoped war using a CB we consider important enough to be a catalyst-worthy CB within the struggle? +is_large_conquest_war_for_struggle_trigger = { + $WAR$ = { + OR = { + # Large claim wars. + AND = { + using_cb = claim_cb + any_in_list = { + list = target_titles + tier >= tier_kingdom + } + } + using_cb = duchy_conquest_cb + using_cb = individual_duchy_de_jure_cb + using_cb = imperial_reconquest_cb + using_cb = invasion_war + using_cb = clan_invasion_war + using_cb = mongol_invasion_war + using_cb = mongol_realm_invasion_war + using_cb = mpo_gok_onslaught_cb + using_cb = major_religious_war + using_cb = undirected_great_holy_war + using_cb = directed_great_holy_war + using_cb = tribal_subjugation_cb + } + } +} + +# Can conquest holy wars be accessed in the current phase of the struggle? +are_holy_wars_disabled_in_struggle_phase_trigger = { + exists = scope:target + trigger_if = { + scope:target.tier = tier_county + scope:target = { + any_county_struggle = { + NOT = { has_struggle_phase_parameter = holy_wars_in_region_cannot_be_declared } + } + } + } + trigger_else = { # For Duchy and Kingdom Holy War + scope:target = { + any_in_de_facto_hierarchy = { # We only consider county within the realm of the target's holder + tier = tier_county + any_county_struggle = { + NOT = { has_struggle_phase_parameter = holy_wars_in_region_cannot_be_declared } + } + } + } + } +} + +# Can the struggle conquest CB be used? +## Currently, we're generous with this. Rather than tying it to a parameter, you just need to be involved in a struggle. +## This should sync neatly with the various struggle_conquest_cb_is_XYZ_phase_triggers, but due to parameter requirements, can't easily be made to do so automagically. +can_use_struggle_cbs_trigger = { + OR = { + any_character_struggle = { involvement = involved } + # Execption if taking hostility ending + AND = { + exists = scope:attacker.house + scope:attacker.house = { + OR ={ + has_house_modifier = fp2_struggle_hostility_house_combined_modifier + has_house_modifier = fp2_struggle_hostility_house_faith_modifier + has_house_modifier = fp2_struggle_hostility_house_culture_modifier + } + } + } + } +} + +# These triggers govern the relative costs for the struggle conquest CB. +## These should sync neatly with can_use_struggle_cbs_trigger, but due to parameter requirements, can't easily be made to do so automagically. +## Cheap. +struggle_conquest_cb_is_warlike_phase_trigger = { + $CHAR1$ = { + any_character_struggle = { + involvement = involved + is_struggle_type = iberian_struggle + is_struggle_phase = struggle_iberia_phase_hostility + is_secondary_character_involvement_either_trigger = { CHAR = $CHAR2$ } + } + } +} +## Average. +struggle_conquest_cb_is_average_phase_trigger = { + $CHAR1$ = { + any_character_struggle = { + involvement = involved + is_struggle_type = iberian_struggle + is_struggle_phase = struggle_iberia_phase_opportunity + is_secondary_character_involvement_either_trigger = { CHAR = $CHAR2$ } + } + } +} +## Pricey. +struggle_conquest_cb_is_peaceful_phase_trigger = { + $CHAR1$ = { + any_character_struggle = { + involvement = involved + is_struggle_type = iberian_struggle + OR = { + is_struggle_phase = struggle_iberia_phase_compromise + is_struggle_phase = struggle_iberia_phase_conciliation + } + is_secondary_character_involvement_either_trigger = { CHAR = $CHAR2$ } + } + } +} + +# Work out whether we need to vassalise someone vs. taking some of their stuff. +struggle_conquest_cb_target_is_ocm_trigger = { + any_in_list = { + list = target_titles + # Should only ever be one title, but just in case... + count = all + holder = { + any_held_title = { + count = 1 + tier = tier_county + } + NOT = { + any_vassal = { highest_held_title_tier >= tier_county } + } + } + } +} + +struggle_blocks_invasion_conquest_cb_trigger = { + trigger_if = { + limit = { + scope:attacker = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = invasion_conquest_war_cannot_be_declared + } + } + exists = scope:defender + } + scope:defender = { + NOR = { + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = invasion_conquest_war_cannot_be_declared + } + any_character_struggle = { + involvement = interloper + has_struggle_phase_parameter = invasion_conquest_war_cannot_be_declared + } + } + } + } + trigger_else = { always = yes } +} diff --git a/common/scripted_triggers/00_government_triggers.txt b/common/scripted_triggers/00_government_triggers.txt new file mode 100644 index 00000000..b1275570 --- /dev/null +++ b/common/scripted_triggers/00_government_triggers.txt @@ -0,0 +1,70 @@ + +should_apply_tribal_development_penalty_trigger = { + government_has_flag = government_is_tribal + NOR = { + any_liege_or_above = { + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + } + any_vassal_or_below = { + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + } + any_neighboring_top_liege_realm_owner = { + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + tier_difference = { + target = prev + value < -1 + } + } + scope:county ?= { + holder ?= { + any_neighboring_realm_same_rank_owner = { + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + } + } + } + } +} + +faith_qualifies_for_west_african_pagan_feudalisation_trigger = { + faith = { + # Unreformed West African Pagans are our targets. + OR = { + religion = religion:akom_religion + religion = religion:west_african_religion + religion = religion:west_african_bori_religion + religion = religion:west_african_orisha_religion + religion = religion:west_african_roog_religion + } + custom_tooltip = { + text = faith_qualifies_for_west_african_pagan_feudalisation_trigger.tt + has_doctrine_parameter = unreformed + } + } +} + +should_use_temple_character_background_trigger = { + trigger_if = { + limit = { is_landed = yes } + government_has_flag = government_is_theocracy + } + trigger_else = { + OR = { + has_trait = order_member + has_council_position = councillor_court_chaplain + government_has_flag = government_is_theocracy + is_clergy = yes + } + } +} diff --git a/common/scripted_triggers/00_great_holy_war_triggers.txt b/common/scripted_triggers/00_great_holy_war_triggers.txt new file mode 100644 index 00000000..549bc262 --- /dev/null +++ b/common/scripted_triggers/00_great_holy_war_triggers.txt @@ -0,0 +1,134 @@ + +suitable_theocrat_sponsor_trigger = { + faith = scope:the_faith + is_capable_adult_ai = yes + is_imprisoned = no +} + +suitable_faith_for_undirected_ghw_trigger = { + OR = { + has_doctrine_parameter = great_holy_wars_active + AND = { + has_doctrine_parameter = great_holy_wars_active_if_reformed + NOT = { has_doctrine_parameter = unreformed } + } + has_doctrine = divine_destiny_doctrine #SPECIAL: Has become the Chakravarti + } + has_doctrine = doctrine_spiritual_head + NOR = { + has_doctrine_parameter = unreformed + AND = { + has_doctrine = tenet_dharmic_pacifism + NOT = { has_doctrine = divine_destiny_doctrine } + } + has_doctrine = tenet_pacifism + } + fervor >= 75 + save_temporary_scope_value_as = { + name = faith_strength + value = faith_military_strength + } + save_temporary_scope_as = faith + any_kingdom = { + valid_ghw_target_trigger = { FAITH = scope:faith } + } +} + +suitable_faith_for_directed_ghw_trigger = { + OR = { + has_doctrine = tenet_armed_pilgrimages #Catholics + has_doctrine = tenet_struggle_submission #Islam (though, the default Faiths have Temporal Heads, so still do not qualify) + has_doctrine = tenet_warmonger #Germanic (though, starting as Unreformed, it still doesn't qualify by default) + has_doctrine = divine_destiny_doctrine #SPECIAL: Has become the Chakravarti + } + has_doctrine = doctrine_temporal_head + NOR = { + has_doctrine_parameter = unreformed + AND = { + has_doctrine = tenet_dharmic_pacifism + NOT = { has_doctrine = divine_destiny_doctrine } + } + has_doctrine = tenet_pacifism + } + fervor >= 75 +} + +suitable_faith_for_any_ghw_trigger = { + OR = { + has_doctrine = tenet_armed_pilgrimages #Catholics + has_doctrine = tenet_struggle_submission #Islam (though, the default Faiths have Temporal Heads, so still do not qualify) + has_doctrine = tenet_warmonger #Germanic (though, starting as Unreformed, it still doesn't qualify by default) + has_doctrine = divine_destiny_doctrine #SPECIAL: Has become the Chakravarti + } + OR = { + has_doctrine = doctrine_temporal_head + has_doctrine = doctrine_spiritual_head + } + NOR = { + has_doctrine_parameter = unreformed + AND = { + has_doctrine = tenet_dharmic_pacifism + NOT = { has_doctrine = divine_destiny_doctrine } + } + has_doctrine = tenet_pacifism + } + fervor >= 65 +} + +valid_ghw_target_trigger = { + exists = capital_vassal.capital_vassal + any_in_de_jure_hierarchy = { + continue = { tier > tier_county } + tier = tier_county + count >= 5 + $FAITH$ = { + is_hostile_enough_for_holy_war_trigger = { FAITH = prev.holder.top_liege.faith } + } + } + NOT = { + any_in_de_jure_hierarchy = { + continue = { tier > tier_county } + tier = tier_county + $FAITH$ = { + is_hostile_enough_for_holy_war_trigger = { FAITH = prev.holder.top_liege.faith } + prev.holder.top_liege.current_military_strength > { value = scope:faith_strength } + } + } + } +} + +#The Pope is getting annoyed that player hasn't joined or contributed to the Crusade yet. +ghw_pope_annoyed_at_lack_of_participation_trigger = { + faith = scope:the_faith + NOR = { + this = scope:the_faith.great_holy_war.ghw_war_declarer + has_character_flag = ghw_unpledging_cooldown + #Has not already unpledged and been castigated for it once. + has_character_flag = ghw_unpledged_once + #Has not already pledged troops or money. + has_character_flag = ghw_pledged_gold + scope:the_faith.great_holy_war = { has_pledged_attacker = prev } + #Do not pledge against your own liege, or when your top liege belongs to the faith being targeted. + any_liege_or_above = { + this = scope:the_faith.great_holy_war.ghw_target_character + } + } + OR = { #Either be independent, or all lieges above you MUST be of the same Faith declaring the war to avoid messy situations of vassals and lieges fighting against each other. + is_independent_ruler = yes + NOT = { + any_liege_or_above = { + NOT = { faith = scope:the_faith } + } + } + } +} +ghw_pope_annoyed_at_lack_of_participation_tier_trigger = { #Either King/Emperor, or Independent Dukes. + OR = { + highest_held_title_tier > 3 + AND = { + is_independent_ruler = yes + highest_held_title_tier >= tier_duchy + is_landless_adventurer = no + } + } +} diff --git a/common/scripted_triggers/00_has_dlc_scripted_triggers.txt b/common/scripted_triggers/00_has_dlc_scripted_triggers.txt new file mode 100644 index 00000000..febc6c19 --- /dev/null +++ b/common/scripted_triggers/00_has_dlc_scripted_triggers.txt @@ -0,0 +1,89 @@ +################################################## +# Chapter Bonus Triggers +has_sp4_dlc_trigger = { + has_dlc_feature = crowns_of_the_world +} + +################################################## +# Creator content Triggers +has_afr_dlc_trigger = { + has_dlc_feature = north_african_attire +} +has_pol_dlc_trigger = { + has_dlc_feature = west_slavic_attire +} + +has_cp3_dlc_trigger = { + has_dlc_feature = medieval_monuments +} + +has_cp4_dlc_trigger = { + has_dlc_feature = arctic_attire +} + + +################################################## +# Booster Pack Triggers + +has_bp1_dlc_trigger = { + has_dlc_feature = friends_and_foes +} + +has_bp2_dlc_trigger = { + has_dlc_feature = wards_and_wardens +} + +has_bp3_dlc_trigger = { + has_dlc_feature = wandering_nobles +} + +################################################## +# Flavour Pack Triggers + +has_fp1_dlc_trigger = { + # Does the host have the appropriate DLC? + has_dlc_feature = the_northern_lords +} + +has_fp2_dlc_trigger = { + # Does the host have the appropriate DLC? + has_dlc_feature = the_fate_of_iberia +} + +has_fp3_dlc_trigger = { + # Does the host have the appropriate DLC? + has_dlc_feature = legacy_of_persia +} + +has_ce1_dlc_trigger = { + # Does the host have the appropriate DLC? + has_dlc_feature = legends_of_the_dead +} + +has_mpo_dlc_trigger = { + # Does the host have the appropriate DLC? + has_dlc_feature = khans_of_the_steppe +} + +################################################## +# Expansion Pack Triggers + +has_ep1_dlc_trigger = { + has_dlc_feature = royal_court +} + +has_ep1_court_positions_dlc_trigger = { + has_dlc_feature = royal_court +} + +has_ep2_dlc_trigger = { + has_dlc_feature = tours_and_tournaments +} + +has_ep3_dlc_trigger = { + has_dlc_feature = roads_to_power +} + +has_playable_adventurer_dlc_trigger = { + has_dlc_feature = roads_to_power +} diff --git a/common/scripted_triggers/00_hunt_triggers.txt b/common/scripted_triggers/00_hunt_triggers.txt new file mode 100644 index 00000000..d911f021 --- /dev/null +++ b/common/scripted_triggers/00_hunt_triggers.txt @@ -0,0 +1,1074 @@ + +can_hunt_trigger = { + NOR = { + has_trait = wounded_2 + has_trait = wounded_3 + has_trait = infirm + has_trait = maimed + has_trait = blind + } + has_contagious_deadly_disease_trigger = no + custom_tooltip = { + text = hunt_cannot_hunt_parameter_tt + NOT = { + culture = { has_cultural_parameter = cannot_hunt } + } + } +} + +# Deer/Antelope +hunt_animal_deer_antelope_trigger = { + OR = { + hunt_animal_deer_trigger = yes + hunt_animal_antelope_trigger = yes + } + hunt_animal_big_available_trigger = yes +} + +# Deer +hunt_animal_deer_trigger = { + geographical_region = hunt_animal_deer_region + OR = { + hunt_animal_temperate_terrain_trigger = yes + terrain = jungle + } +} + +# Antelope +hunt_animal_antelope_trigger = { + geographical_region = hunt_animal_antelope_region + OR = { + hunt_animal_temperate_terrain_trigger = yes + hunt_animal_tropical_terrain_trigger = yes + NOT = { terrain = jungle } + } + trigger_if = { + limit = { exists = duchy } + NOR = { # Lambakanna + duchy = title:d_sinhala # Not native + duchy = title:d_dakhina_desa # Not native + duchy = title:d_ruhunu # Not native + } + } +} + +# Gazelle +hunt_animal_gazelle_trigger = { + geographical_region = hunt_animal_gazelle_region + NOT = { geographical_region = custom_sahara_proper } + hunt_animal_tropical_terrain_trigger = yes +} + +# Roe +hunt_animal_roe_trigger = { + OR = { + AND = { + geographical_region = world_europe + trigger_if = { + limit = { + exists = empire + empire = title:e_scandinavia + } + NOR = { + terrain = taiga + terrain = mountains + terrain = hills + } + } + } + geographical_region = world_asia_minor + geographical_region = world_india + geographical_region = world_burma + geographical_region = world_tibet + } +} + +# Bison +hunt_animal_bison_trigger = { + geographical_region = hunt_animal_bison_region + hunt_animal_tropical_terrain_trigger = no + hunt_animal_big_available_trigger = yes +} + +# Aurochs +hunt_animal_aurochs_trigger = { + geographical_region = hunt_animal_aurochs_region + hunt_animal_tropical_terrain_trigger = no + hunt_animal_big_available_trigger = yes +} + +# Fox +hunt_animal_fox_trigger = { + hunt_animal_small_available_trigger = yes + trigger_if = { + limit = { exists = duchy } + NOT = { duchy = title:d_socotra } # Not native + } +} + +# Terrain Triggers +hunt_animal_temperate_terrain_trigger = { + OR = { + # Flat + terrain = plains + terrain = farmlands + terrain = steppe + terrain = wetlands + # Wooded + terrain = forest + terrain = taiga + # Rough + terrain = hills + terrain = mountains + } +} + +hunt_animal_tropical_terrain_trigger = { + OR = { + # Flat + terrain = desert + terrain = drylands + terrain = floodplains + terrain = oasis + # Wooded + terrain = jungle + # Rough + terrain = desert_mountains + } +} + +# Wolf +hunt_animal_wolf_trigger = { + NAND = { + geographical_region = world_africa_west + OR = { + terrain = hills + terrain = forest + terrain = jungle + terrain = mountains + } + } +} + +# Hyena +hunt_animal_hyena_trigger = { + OR = { + geographical_region = world_africa + geographical_region = world_middle_east + geographical_region = world_india + } +} + +# Lynx +hunt_animal_lynx_trigger = { + OR = { + geographical_region = world_europe_north + geographical_region = world_europe_east + geographical_region = world_steppe_east + geographical_region = world_steppe_west + geographical_region = world_tibet + } +} + +# Boar +hunt_animal_boar_trigger = { + geographical_region = hunt_animal_boar_region + hunt_animal_big_available_trigger = yes +} + +# Bear +hunt_animal_bear_trigger = { + geographical_region = hunt_animal_bear_region + hunt_animal_big_available_trigger = yes +} + +# Caracal +hunt_animal_caracal_trigger = { + OR = { + geographical_region = world_middle_east + geographical_region = world_india_rajastan + geographical_region = world_africa + geographical_region = world_asia_minor + } + OR = { + terrain = drylands + terrain = hills + } +} + +# Crocodile +hunt_animal_crocodile_trigger = { + OR = { + geographical_region = world_india + geographical_region = world_africa_north_east + geographical_region = world_africa_west + geographical_region = world_africa_east + # Restrict our Mesopotamian crocs preemptively to _only_ floodplains. + AND = { + terrain = floodplains + geographical_region = world_middle_east + } + } + OR = { + is_riverside_province = yes + terrain = floodplains + terrain = jungle + AND = { + is_coastal = yes + # Nile crocodiles aren't ocean-dwellers. + NOT = { geographical_region = world_africa_north_east } + } + } +} + +# Hippo +hunt_animal_hippo_trigger = { + OR = { + geographical_region = world_africa_north_east + geographical_region = world_africa_west + geographical_region = world_africa_east + } + is_riverside_province = yes +} + +# Big Cat +hunt_animal_big_cat_trigger = { + geographical_region = hunt_animal_big_cat_region + hunt_animal_big_available_trigger = yes + OR = { + hunt_animal_lion_trigger = yes + hunt_animal_tiger_trigger = yes + hunt_animal_leopard_trigger = yes + } +} + +hunt_animal_lion_trigger = { + OR = { + geographical_region = world_africa + geographical_region = world_middle_east + } + OR = { + terrain = drylands + terrain = desert + terrain = desert_mountains + terrain = jungle + terrain = forest + terrain = hills + terrain = mountains + } + NOR = { + terrain = farmlands + terrain = floodplains + } +} + +hunt_animal_tiger_trigger = { + OR = { + geographical_region = world_steppe + geographical_region = world_india + geographical_region = world_burma + geographical_region = world_middle_east_persia + } + OR = { + terrain = jungle + terrain = forest + terrain = taiga + terrain = mountains + terrain = hills + } + NOR = { + terrain = farmlands + terrain = floodplains + } +} + +hunt_animal_leopard_trigger = { + OR = { + geographical_region = world_africa_north_west + geographical_region = world_africa_east + geographical_region = world_africa_west + geographical_region = world_middle_east + geographical_region = world_india + geographical_region = world_burma + geographical_region = world_steppe_east + geographical_region = world_tibet + geographical_region = world_asia_minor + } + NOR = { + terrain = farmlands + terrain = floodplains + terrain = desert_mountains + } +} + +hunt_animal_steppe_trigger = { # Saiga/etc. + geographical_region = world_steppe + OR = { + terrain = steppe + terrain = hills + terrain = desert + terrain = wetlands + } +} + +hunt_animal_big_available_trigger = { + OR = { + OR = { + has_building_or_higher = hunting_grounds_01 + has_building_or_higher = royal_forest_01 + } + AND = { + trigger_if = { + limit = { exists = county } + NOR = { + # Counties + county = title:c_dahlak # Not native + county = title:c_faereyar # Not native + county = title:c_hormuz # Not native + county = title:c_lesbos # Extinct + county = title:c_maldives # Not native + county = title:c_malta # Extinct + county = title:c_naxos # Extinct + } + } + trigger_if = { + limit = { exists = duchy } + NOR = { + duchy = title:d_canarias # Not native + duchy = title:d_krete # Extinct + duchy = title:d_iceland # Not native + duchy = title:d_mallorca # Not native + duchy = title:d_socotra # Not native + } + } + } + } +} + +hunt_animal_small_available_trigger = { + OR = { + OR = { + has_building_or_higher = hunting_grounds_01 + has_building_or_higher = royal_forest_01 + } + AND = { + trigger_if = { + limit = { exists = county } + NOR = { + county = title:c_dahlak # Not native + county = title:c_maldives # Not native + } + } + trigger_if = { + limit = { exists = duchy } + NOT = { duchy = title:d_canarias } # Not native + } + } + } +} + +hunt_activity_attendee_trigger = { + is_available_for_activity_trigger = yes + liege = scope:activity.activity_host + NOT = { has_trait = blind } +} + +hunt_activity_large_game_trigger = { + OR = { + $VAR$ ?= flag:hart + $VAR$ ?= flag:elk + $VAR$ ?= flag:stag + $VAR$ ?= flag:antelope + $VAR$ ?= flag:saiga + $VAR$ ?= flag:reindeer + $VAR$ ?= flag:saiga + $VAR$ ?= flag:bison + $VAR$ ?= flag:aurochs + $VAR$ ?= flag:boar + $VAR$ ?= flag:bear + $VAR$ ?= flag:lion + $VAR$ ?= flag:tiger + $VAR$ ?= flag:leopard + } +} + +hunt_activity_deer_antelope_game_trigger = { + OR = { + hunt_activity_deer_game_trigger = { VAR = $VAR$ } + hunt_activity_antelope_game_trigger = { VAR = $VAR$ } + } +} + +hunt_activity_antelope_game_trigger = { + OR = { + $VAR$ ?= flag:antelope + $VAR$ ?= flag:gazelle + $VAR$ ?= flag:saiga + } +} + +hunt_activity_deer_game_trigger = { + OR = { + $VAR$ ?= flag:stag + $VAR$ ?= flag:hart + $VAR$ ?= flag:roe + $VAR$ ?= flag:reindeer + $VAR$ ?= flag:elk + } +} + +hunt_activity_big_cat_game_trigger = { + OR = { + $VAR$ ?= flag:leopard + $VAR$ ?= flag:lion + $VAR$ ?= flag:tiger + } +} + +hunt_activity_herd_game_trigger = { + OR = { + hunt_activity_deer_antelope_game_trigger = { VAR = $VAR$ } + $VAR$ ?= flag:bison + $VAR$ ?= flag:aurochs + } +} + +hunt_activity_exotic_bird_trigger = { + OR = { + $VAR$ ?= flag:stork + $VAR$ ?= flag:crane + $VAR$ ?= flag:heron + $VAR$ ?= flag:egret + $VAR$ ?= flag:flamingo + $VAR$ ?= flag:pelican + } +} + +hunt_activity_bird_trigger = { + OR = { + $VAR$ ?= flag:pheasant + $VAR$ ?= flag:goose + $VAR$ ?= flag:grouse + $VAR$ ?= flag:quail + $VAR$ ?= flag:duck + $VAR$ ?= flag:swan + $VAR$ ?= flag:goose + $VAR$ ?= flag:quail + $VAR$ ?= flag:stork + $VAR$ ?= flag:crane + $VAR$ ?= flag:heron + $VAR$ ?= flag:egret + $VAR$ ?= flag:flamingo + $VAR$ ?= flag:pelican + } +} + +hunt_activity_ground_bird_trigger = { + OR = { + $VAR$ ?= flag:pheasant + $VAR$ ?= flag:bustard + $VAR$ ?= flag:grouse + $VAR$ ?= flag:quail + } +} + +hunt_activity_recent_hunt_sighting_trigger = { + OR = { + exists = var:recent_sighting + exists = var:animal_type + has_county_modifier = hunt_sighting_standard_modifier + has_county_modifier = hunt_sighting_dangerous_modifier + has_county_modifier = hunt_sighting_legendary_modifier + has_county_modifier = hunt_sighting_falconry_modifier + } +} + +hunt_sighting_event_trigger = { + is_available_adult = yes + is_landless_adventurer = no + NOT = { has_character_flag = recent_hunt_sighting } + trigger_if = { + limit = { is_landed = no } + NOT = { domicile.domicile_location ?= province:496 } + } + OR = { + court_position:master_of_hunt_court_position ?= { is_available_adult = yes } + court_position:huntperson_camp_officer ?= { is_available_adult = yes } + any_vassal_or_below = { + is_available_adult = yes + has_trait = lifestyle_hunter + } + any_courtier = { + is_available_adult = yes + has_trait = lifestyle_hunter + } + } +} + +hunt_new_sighting_event_trigger = { + trigger_if = { + limit = { is_landed = no } + domicile.domicile_location.county ?= { + NOR = { + has_variable = recent_sighting + any_neighboring_county = { has_variable = recent_sighting } + has_county_modifier = hunt_sighting_$TYPE$_modifier + any_neighboring_county = { has_county_modifier = hunt_sighting_$TYPE$_modifier } + hunt_activity_recent_hunt_sighting_trigger = yes + any_neighboring_county = { hunt_activity_recent_hunt_sighting_trigger = yes } + } + } + } + trigger_else = { + any_sub_realm_county = { hunt_activity_recent_hunt_sighting_trigger = no } + } +} + +hunt_is_valid_subordinate_trigger = { + is_adult = yes + NOT = { this = $LIEGE$ } + OR = { + is_vassal_of = $LIEGE$ + is_courtier_of = $LIEGE$ + } + is_participant_in_activity = $LIEGE$.involved_activity + NOR = { + has_trait = incapable + has_trait = wounded_2 + has_trait = wounded_3 + } +} + +hunt_small_game_trigger = { + exists = $VAR$ + OR = { + $VAR$ = flag:fox + $VAR$ = flag:hare + } +} + +hunt_story_trigger = { + exists = scope:activity + scope:activity = { + exists = var:hunt_activity_story + var:hunt_activity_story = flag:$STORY$ + } +} + +activity_befriend_woo_trigger = { + exists = intent_target + intent_target = $CHARACTER$ + OR = { + has_activity_intent = befriend_attendee_intent + has_activity_intent = woo_attendee_intent + } +} + +hunt_mentor_child_trigger = { + NOR = { + has_trait = lifestyle_hunter + AND = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 25 + } + } + } + is_child_of = scope:host + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + NAND = { + exists = scope:hunt_participant + this = scope:hunt_participant + } +} + +hunt_hide_big_trigger = { + OR = { + $VARIABLE$ ?= flag:wolf + $VARIABLE$ ?= flag:stag + $VARIABLE$ ?= flag:reindeer + $VARIABLE$ ?= flag:antelope + $VARIABLE$ ?= flag:saiga + $VARIABLE$ ?= flag:hart + $VARIABLE$ ?= flag:elk + $VARIABLE$ ?= flag:bison + $VARIABLE$ ?= flag:aurochs + $VARIABLE$ ?= flag:lion + $VARIABLE$ ?= flag:tiger + $VARIABLE$ ?= flag:bear + $VARIABLE$ ?= flag:leopard + $VARIABLE$ ?= flag:unicorn + $VARIABLE$ ?= flag:dragon + } +} + +hunt_lifestyle_track_greater_equal_trigger = { + has_trait = lifestyle_hunter + has_trait_xp = { + trait = lifestyle_hunter + track = $TRACK$ + value >= $GREATER_EQUAL$ + } +} + +hunt_lifestyle_track_less_trigger = { + has_trait = lifestyle_hunter + has_trait_xp = { + trait = lifestyle_hunter + track = $TRACK$ + value < $LESS_THAN$ + } +} + +hunt_murder_target_trigger = { + OR = { + # Intent + AND = { + has_activity_intent = murder_attendee_intent + intent_target ?= { hunt_valid_accidental_murder_target_trigger = yes } + } + # Schemes + scope:activity = { + any_attending_character = { + NOT = { this = root } + hunt_valid_accidental_murder_target_trigger = yes + OR = { + # Rival + has_relation_rival = root + # Scheme + any_targeting_scheme = { hunt_murder_scheme_target_trigger = yes } + } + save_temporary_scope_as = murder_target_temp + } + } + # Is trying to murder + var:hunt_murder_attempt ?= { + hunt_valid_accidental_murder_target_trigger = yes + save_temporary_scope_as = murder_target_temp + } + } + # Not put off murder already + NAND = { + exists = scope:murder_target_temp + var:hunt_murder_defer ?= scope:murder_target_temp + } +} + +hunt_abduct_target_trigger = { + OR = { + # Intent + hunt_murder_intent_target_trigger = yes + # Schemes + scope:activity = { + any_attending_character = { + NOT = { this = root } + hunt_valid_accidental_murder_target_trigger = yes + OR = { + # Rival + has_relation_rival = root + # Scheme + any_targeting_scheme = { hunt_murder_scheme_target_trigger = yes } + } + save_temporary_scope_as = abduct_target_temp + } + } + # Is trying to abduct + var:hunt_abduct_attempt ?= { + hunt_valid_accidental_murder_target_trigger = yes + save_temporary_scope_as = abduct_target_temp + } + } + # Not put off abduction already + NAND = { + exists = scope:abduct_target_temp + var:hunt_abduct_defer ?= scope:abduct_target_temp + } +} + +hunt_valid_accidental_murder_target_trigger = { + is_alive = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + NOT = { has_character_flag = not_slaying } + is_participant_in_activity = scope:activity +} + +hunt_murder_scheme_target_trigger = { + scheme_type = murder + OR = { + scheme_owner = root + any_scheme_agent_character = { this = root } + } + save_temporary_scope_as = scheme + scheme_progress > scheme_progress_33 +} + +hunt_murder_intent_target_trigger = { + has_activity_intent = murder_attendee_intent + exists = intent_target + intent_target = { hunt_valid_accidental_murder_target_trigger = yes } + save_temporary_scope_as = murder_target_temp +} + +hunt_valid_murder_accomplice_trigger = { + NOT = { this = root } + is_adult = yes + is_participant_in_activity = scope:activity + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:host } + save_temporary_scope_as = murderer_temp +} + +hunt_1012_hated_participant_trigger = { + AND = { + exists = var:participant_to_use_1011 + var:participant_to_use_1011 = { + is_alive = yes + is_participant_in_activity = scope:activity + } + NOR = { + has_trait = just + has_trait = compassionate + } + } +} + +hunt_murder_risk_trigger = { + is_adult = yes + OR = { + # Scheme + is_scheming_against = { + target = root + type = murder + } + # Intent + AND = { + hunt_murder_intent_target_trigger = yes + intent_target = root + } + AND = { + exists = var:hunt_murder_attempt + var:hunt_murder_attempt = root + } + } +} + +hunt_potential_murder_risk_trigger = { + is_adult = yes + NOT = { + has_any_good_relationship_with_character_trigger = { CHARACTER = root } + } + OR = { + # Rival + has_relation_rival = root + # Feud + AND = { + exists = house.house_head + NOT = { house = root.house } + house.house_head = { + any_owned_story = { + story_type = story_cycle_house_feud + var:house_feud_house = root.house + } + } + } + # Heir + AND = { + this = root.player_heir + NOT = { + has_any_good_relationship_with_character_trigger = { CHARACTER = root.player_heir } + } + opinion = { + target = root + value <= 20 + } + NOR = { + has_trait = craven + has_trait = honest + has_trait = content + } + } + AND = { + exists = var:hunt_murder_attempt + var:hunt_murder_attempt = root + } + } + can_start_scheme = { + type = murder + target_character = root + } + trigger_if = { + limit = { + OR = { + is_close_family_of = root + is_consort_of = root + } + } + OR = { + has_relation_rival = root + NOR = { + has_trait = compassionate + has_trait = just + } + } + } + opinion = { + target = root + value <= -25 + } +} + +hunt_accomplice_general_trigger = { + is_ai = yes + is_participant_in_activity = scope:activity + NOR = { + this = $TARGET$ + this = $MURDERER$ + has_any_good_relationship_with_character_trigger = { CHARACTER = $TARGET$ } + } + OR = { + has_any_good_relationship_with_character_trigger = { CHARACTER = $MURDERER$ } + has_relation_rival = root + NOR = { + has_trait = craven + has_trait = honest + has_trait = content + } + } +} + +hunt_elective_accomplice_trigger = { + hunt_accomplice_general_trigger = { + MURDERER = $MURDERER$ + TARGET = $TARGET$ + } + save_temporary_scope_as = elector_temp + $MURDERER$ = { + has_election_vote_of = { + who = scope:elector_temp + title = $TARGET$.primary_title + } + } +} + +hunt_claimant_faction_trigger = { + faction_is_type = claimant_faction + exists = special_character + special_character = $MURDERER$ + exists = special_title + special_title = $TARGET$.primary_title +} + +hunt_pertinent_friendly_trigger = { + OR = { + AND = { + OR = { + has_activity_intent = befriend_attendee_intent + has_activity_intent = woo_attendee_intent + } + intent_target = scope:pertinent + } + has_relation_friend = scope:pertinent + has_relation_lover = scope:pertinent + } +} + +hunt_pertinent_hostile_trigger = { + OR = { + AND = { + has_activity_intent = murder_attendee_intent + intent_target = scope:pertinent + } + has_relation_rival = scope:pertinent + } +} + +hunt_dharmic_pacificist_trigger = { + faith = { has_doctrine = tenet_dharmic_pacifism } + NOT = { has_trait = cynical } +} + +hunt_animal_type_small_trigger = { + OR = { + $VAR$ ?= flag:cat + $VAR$ ?= flag:dog + $VAR$ ?= flag:fox + $VAR$ ?= flag:gazelle + $VAR$ ?= flag:hare + $VAR$ ?= flag:roe + } +} + +hunt_animal_type_herbivore_trigger = { + OR = { + hunt_activity_deer_antelope_game_trigger = { VAR = $VAR$ } + $VAR$ ?= flag:aurochs + $VAR$ ?= flag:bison + $VAR$ ?= flag:boar + $VAR$ ?= flag:hare + } +} + +hunt_animal_type_dangerous_trigger = { + OR = { + $VAR$ ?= flag:boar + $VAR$ ?= flag:bison + $VAR$ ?= flag:aurochs + $VAR$ ?= flag:wolf + $VAR$ ?= flag:hyena + $VAR$ ?= flag:lynx + $VAR$ ?= flag:bear + $VAR$ ?= flag:lion + $VAR$ ?= flag:tiger + $VAR$ ?= flag:leopard + $VAR$ ?= flag:stag + $VAR$ ?= flag:antelope + $VAR$ ?= flag:saiga + $VAR$ ?= flag:reindeer + $VAR$ ?= flag:hart + $VAR$ ?= flag:elk + } +} + +hunt_animal_type_predator_trigger = { + OR = { + $VAR$ ?= flag:wolf + $VAR$ ?= flag:hyena + $VAR$ ?= flag:lynx + $VAR$ ?= flag:bear + $VAR$ ?= flag:lion + $VAR$ ?= flag:tiger + $VAR$ ?= flag:leopard + } +} + +hunt_animal_type_prestigious_trigger = { + OR = { + $VAR$ ?= flag:elk + $VAR$ ?= flag:hart + $VAR$ ?= flag:boar + $VAR$ ?= flag:bear + $VAR$ ?= flag:lion + $VAR$ ?= flag:tiger + $VAR$ ?= flag:leopard + } +} + +hunt_animal_type_lives_in_caves_trigger = { + OR = { + $VAR$ ?= flag:wolf + $VAR$ ?= flag:hyena + $VAR$ ?= flag:lynx + $VAR$ ?= flag:bear + $VAR$ ?= flag:leopard + } +} + +hunt_killed_by_animal_trigger = { + OR = { + death_reason = death_deer + death_reason = death_moose + death_reason = death_bear + death_reason = death_boar + death_reason = death_antelope + death_reason = death_gazelle + death_reason = death_bison + death_reason = death_aurochs + death_reason = death_wolf + death_reason = death_hyena + death_reason = death_lion + death_reason = death_tiger + death_reason = death_leopard + death_reason = death_lynx + death_reason = death_roe + death_reason = death_hart + } +} + +hunt_legendary_animal_custom_loc_trigger = { + trigger_if = { + limit = { exists = scope:story } + scope:story = { story_type = story_cycle_hunt_mystical_animal } + } + trigger_else_if = { + limit = { exists = $ACTIVITY$ } + $ACTIVITY$ = { + has_activity_option = { category = special_type option = hunt_type_legendary } + } + } + trigger_else = { always = no } +} + +hunt_murder_bodyguard_appears_trigger = { + OR = { + has_court_position = bodyguard_court_position + has_court_position = akolouthos_court_position + } + is_participant_in_activity = scope:activity + NOR = { + this = scope:murderer + AND = { + exists = scope:accomplice + this = scope:accomplice + } + is_scheming_against = { + target = root + type = murder + } + AND = { + has_activity_intent = murder_attendee_intent + intent_target = root + } + } +} + +# Target is valid for host to want to gift +hunt_trophy_recipient_trigger = { + NOT = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + } + reverse_opinion = { target = root value > 20 } +} + +hunt_snowy_forest_trigger = { + OR = { + graphical_wilderness_forest_trigger = yes + graphical_wilderness_forest_pine_trigger = yes + } + OR = { + has_province_modifier = winter_normal_modifier + has_province_modifier = winter_harsh_modifier + } +} + +hunt_ongoing_sighting_trigger = { + OR = { + has_county_modifier = hunt_sighting_standard_modifier + has_county_modifier = hunt_sighting_dangerous_modifier + has_county_modifier = hunt_sighting_legendary_modifier + } + exists = var:animal_type + var:sighting_owner ?= root + any_neighboring_county = { + trigger_if = { + limit = { + root = { is_landed = yes } + } + holder.top_liege = root.top_liege + } + hunt_activity_recent_hunt_sighting_trigger = no + } +} + +hunt_is_nerge_type = { + has_activity_option = { + category = special_type + option = hunt_type_nerge + } +} + +activity_is_nerge_type = { + scope:activity ?= { + hunt_is_nerge_type = yes + } +} diff --git a/common/scripted_triggers/00_illustration_triggers.txt b/common/scripted_triggers/00_illustration_triggers.txt new file mode 100644 index 00000000..a834e413 --- /dev/null +++ b/common/scripted_triggers/00_illustration_triggers.txt @@ -0,0 +1,619 @@ +should_use_tribal_realm_palace_graphics_trigger = { + government_has_flag = government_is_tribal + culture = { + has_graphical_india_culture_group_trigger = no + has_graphical_mena_culture_group_trigger = no + has_graphical_steppe_culture_group_trigger = no + has_graphical_african_culture_group_trigger = no + } +} + +has_graphical_mena_culture_group_trigger = { + has_building_gfx = mena_building_gfx +} + +has_graphical_india_culture_group_trigger = { + has_building_gfx = indian_building_gfx +} + +has_graphical_mediterranean_culture_group_trigger = { + OR = { + has_building_gfx = mediterranean_building_gfx + has_building_gfx = byzantine_building_gfx + } +} + +has_graphical_western_culture_group_trigger = { + has_building_gfx = western_building_gfx +} + +has_graphical_norse_culture_group_trigger = { + has_building_gfx = norse_building_gfx +} + +has_graphical_african_culture_group_trigger = { + has_building_gfx = african_building_gfx +} + +has_graphical_steppe_culture_group_trigger = { + has_building_gfx = steppe_building_gfx +} + +has_graphical_iberian_culture_group_trigger = { + has_building_gfx = iberian_building_gfx +} + +has_graphical_iranian_culture_group_trigger = { + has_building_gfx = iranian_building_gfx +} + + +graphical_wilderness_desert_trigger = { + OR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + AND = { + terrain = hills + OR = { + geographical_region = world_africa + geographical_region = world_middle_east_arabia + } + } + } +} + +graphical_wilderness_forest_pine_trigger = { + OR = { + terrain = taiga + AND = { + terrain = forest + OR = { + geographical_region = world_europe_north + geographical_region = world_steppe + } + } + } +} + +graphical_wilderness_forest_trigger = { + OR = { + terrain = forest + terrain = farmlands + } +} + +graphical_wilderness_mountains_trigger = { + terrain = mountains +} + +graphical_wilderness_steppe_trigger = { + OR = { + terrain = steppe + AND = { + terrain = hills + OR = { + geographical_region = world_steppe + geographical_region = world_middle_east_persia + geographical_region = world_middle_east_jerusalem + } + } + } +} + +graphical_drylands_trigger = { + terrain = drylands +} + +graphical_wilderness_wetlands_trigger = { + OR = { + terrain = wetlands + terrain = floodplains + } +} + +graphical_wilderness_jungle_trigger = { + OR = { + terrain = jungle + AND = { + terrain = hills + geographical_region = graphical_india + NOT = { geographical_region = world_tibet } + } + } +} + +graphical_plains_trigger = { + terrain = plains +} + +graphical_wilderness_ocean_trigger = { + is_sea_province = yes +} + +graphical_hills_trigger = { + terrain = hills +} + +### Scripted illustrations + +# This doesn't really evaluate anything, it just saves the scope out for later things to use +title_illustration_save_province_temporary = { + trigger_if = { + limit = { tier = tier_barony } + title_province = { + save_temporary_scope_as = province + } + } + trigger_else_if = { + limit = { + tier > tier_county + NOT = { + any_in_de_jure_hierarchy = { tier = tier_county } + } + } + } + trigger_else = { + title_capital_county.title_province = { + save_temporary_scope_as = province + } + } + always = yes +} + +#has_indian_culture_trigger = { +has_graphical_india_region_trigger = { + trigger_if = { + limit = { + exists = capital_province + } + capital_province = { + geographical_region = graphical_india + } + } + trigger_else_if = { + limit = { + NOT = { exists = capital_province } + } + trigger_if = { + limit = { exists = host.capital_province } + host.capital_province = { + geographical_region = graphical_india + } + } + trigger_else_if = { + limit = { + exists = liege.capital_province + } + liege.capital_province = { + geographical_region = graphical_india + } + } + trigger_else_if = { + limit = { + exists = location.province_owner.capital_province + } + location.province_owner.capital_province = { + geographical_region = graphical_india + } + } + trigger_else = { always = yes } + } + trigger_else = { always = yes } +} + +#has_mediterranean_culture_trigger = { +has_graphical_mediterranean_region_trigger = { + trigger_if = { + limit = { + exists = capital_province + } + capital_province = { + geographical_region = graphical_mediterranean + } + } + trigger_else_if = { + limit = { + NOT = { exists = capital_province } + } + trigger_if = { + limit = { exists = host.capital_province } + host.capital_province = { + geographical_region = graphical_mediterranean + } + } + trigger_else_if = { + limit = { + exists = liege.capital_province + } + liege.capital_province = { + geographical_region = graphical_mediterranean + } + } + trigger_else_if = { + limit = { + exists = location.province_owner.capital_province + } + location.province_owner.capital_province = { + geographical_region = graphical_mediterranean + } + } + trigger_else = { always = yes } + } + trigger_else = { always = yes } +} + +#has_mena_culture_trigger = { +has_graphical_mena_region_trigger = { + trigger_if = { + limit = { + exists = capital_province + } + capital_province = { + OR = { + geographical_region = graphical_mena + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + AND = { + prev = { + government_has_flag = government_is_clan + } + OR = { + geographical_region = world_steppe_west + geographical_region = world_siberia + } + } + } + } + } + trigger_else_if = { + limit = { + NOT = { exists = capital_province } + } + trigger_if = { + limit = { exists = host.capital_province } + host.capital_province = { + OR = { + geographical_region = graphical_mena + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + AND = { + province_owner = { + government_has_flag = government_is_clan + } + OR = { + geographical_region = world_steppe_west + geographical_region = world_siberia + } + } + } + } + } + trigger_else_if = { + limit = { + exists = liege.capital_province + } + liege.capital_province = { + OR = { + geographical_region = graphical_mena + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + AND = { + province_owner = { + government_has_flag = government_is_clan + } + OR = { + geographical_region = world_steppe_west + geographical_region = world_siberia + } + } + } + } + } + trigger_else_if = { + limit = { + exists = location.province_owner.capital_province + } + location.province_owner.capital_province = { + OR = { + geographical_region = graphical_mena + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + AND = { + province_owner = { + government_has_flag = government_is_clan + } + OR = { + geographical_region = world_steppe_west + geographical_region = world_siberia + } + } + } + } + } + trigger_else = { always = yes } + } + trigger_else = { always = yes } +} + +has_graphical_scandinavia_region_trigger = { + trigger_if = { + limit = { + exists = capital_province + } + capital_province = { + geographical_region = world_europe_north + } + } + trigger_else_if = { + limit = { + NOT = { exists = capital_province } + } + trigger_if = { + limit = { exists = host.capital_province } + host.capital_province = { + geographical_region = world_europe_north + } + } + trigger_else_if = { + limit = { + exists = liege.capital_province + } + liege.capital_province = { + geographical_region = world_europe_north + } + } + trigger_else_if = { + limit = { + exists = location.province_owner.capital_province + } + location.province_owner.capital_province = { + geographical_region = world_europe_north + } + } + trigger_else = { always = yes } + } + trigger_else = { always = yes } +} + +#has_western_culture_trigger = { +has_graphical_western_region_trigger = { + trigger_if = { + limit = { + exists = capital_province + } + capital_province = { + NOR = { + geographical_region = graphical_india + geographical_region = graphical_mediterranean + geographical_region = graphical_mena + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + } + } + } + trigger_else_if = { + limit = { + NOT = { exists = capital_province } + } + + trigger_if = { + limit = { exists = host.capital_province } + host.capital_province = { + NOR = { + geographical_region = graphical_india + geographical_region = graphical_mediterranean + geographical_region = graphical_mena + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + } + } + } + trigger_else_if = { + limit = { + exists = liege.capital_province + } + liege.capital_province = { + NOR = { + geographical_region = graphical_india + geographical_region = graphical_mediterranean + geographical_region = graphical_mena + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + } + } + } + trigger_else_if = { + limit = { + exists = location.province_owner.capital_province + } + location.province_owner.capital_province = { + NOR = { + geographical_region = graphical_india + geographical_region = graphical_mediterranean + geographical_region = graphical_mena + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + } + } + } + trigger_else = { always = yes } + } + trigger_else = { always = yes } +} + +#Has graphical region Iberia trigger +has_graphical_iberia_region_trigger = { + trigger_if = { + limit = { + exists = capital_province + } + capital_province = { + geographical_region = world_europe_west_iberia + } + } + trigger_else_if = { + limit = { + NOT = { exists = capital_province } + } + trigger_if = { + limit = { exists = host.capital_province } + host.capital_province = { + geographical_region = world_europe_west_iberia + } + } + trigger_else_if = { + limit = { + exists = liege.capital_province + } + liege.capital_province = { + geographical_region = world_europe_west_iberia + } + } + trigger_else_if = { + limit = { + exists = location.province_owner.capital_province + } + location.province_owner.capital_province = { + geographical_region = world_europe_west_iberia + } + } + trigger_else = { always = yes } + } + trigger_else = { always = yes } +} + +#Has graphical region Iran trigger +has_graphical_iran_region_trigger = { + trigger_if = { + limit = { + exists = capital_province + } + capital_province = { + OR = { + geographical_region = world_middle_east_persia + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + } + } + } + trigger_else_if = { + limit = { + NOT = { exists = capital_province } + } + trigger_if = { + limit = { exists = host.capital_province } + host.capital_province = { + OR = { + geographical_region = world_middle_east_persia + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + } + } + } + trigger_else_if = { + limit = { + exists = liege.capital_province + } + liege.capital_province = { + OR = { + geographical_region = world_middle_east_persia + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + } + } + } + trigger_else_if = { + limit = { + exists = location.province_owner.capital_province + } + location.province_owner.capital_province = { + OR = { + geographical_region = world_middle_east_persia + geographical_region = world_steppe_tarim + geographical_region = world_steppe_central + geographical_region = world_steppe_east + } + } + } + trigger_else = { always = yes } + } + trigger_else = { always = yes } +} + +steppe_building_gfx_use_mena_trigger = { + AND = { + culture = { has_building_gfx = steppe_building_gfx } + OR = { + #western steppe should only be mena if you are clan + NOR = { + geographical_region = world_steppe_west + geographical_region = world_europe + geographical_region = world_asia_minor + geographical_region = world_india + geographical_region = world_burma + geographical_region = world_tibet + } + AND = { + faith.religion = religion:islam_religion + OR = { + geographical_region = world_steppe_west + geographical_region = world_asia_minor + } + } + } + } +} +steppe_building_gfx_use_indian_trigger = { + AND = { + culture = { has_building_gfx = steppe_building_gfx } + OR = { + #western steppe should only be mena if you are clan + geographical_region = world_india + geographical_region = world_burma + geographical_region = world_tibet + } + } +} + +steppe_building_gfx_use_mediterranean_trigger = { + AND = { + culture = { has_building_gfx = steppe_building_gfx } + OR = { + geographical_region = world_europe_south_east + geographical_region = world_europe_south_italy + geographical_region = world_europe_west_iberia + geographical_region = world_asia_minor + } + } +} +steppe_building_gfx_use_iranian_trigger = { + AND = { + OR = { + geographical_region = world_steppe_east + geographical_region = world_steppe_central + geographical_region = world_middle_east_persia + } + culture = { has_building_gfx = steppe_building_gfx } + } +} +steppe_building_gfx_use_western_trigger = { + AND = { + OR = { + geographical_region = world_europe_north + geographical_region = world_europe_west + } + culture = { has_building_gfx = steppe_building_gfx } + } +} diff --git a/common/scripted_triggers/00_interaction_triggers.txt b/common/scripted_triggers/00_interaction_triggers.txt index 8bae0231..adda0bd9 100644 --- a/common/scripted_triggers/00_interaction_triggers.txt +++ b/common/scripted_triggers/00_interaction_triggers.txt @@ -120,7 +120,7 @@ diarch_revocation_has_claim_check_trigger = { } title_revocation_is_admin_governor_trigger = { - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = yes save_temporary_scope_as = liege_temp $VASSAL$ = { @@ -166,9 +166,9 @@ vassal_revocation_is_tyrannical_trigger = { NOR = { exists = scope:administrative_revocation AND = { - has_government = administrative_government + government_has_flag = government_is_administrative $VASSAL$ = { - has_government = administrative_government + government_has_flag = government_is_administrative } } has_revoke_title_reason = $VASSAL$ diff --git a/common/scripted_triggers/00_journey_triggers.txt b/common/scripted_triggers/00_journey_triggers.txt new file mode 100644 index 00000000..b63510a1 --- /dev/null +++ b/common/scripted_triggers/00_journey_triggers.txt @@ -0,0 +1,112 @@ +journey_diplomacy_skill_monument_trigger = { + OR = { + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_learning + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_natural_feature + has_building_with_flag = travel_point_of_interest_religious + NOR = { + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_natural_feature + has_building_with_flag = travel_point_of_interest_martial + has_building_with_flag = travel_point_of_interest_religious + has_building_with_flag = travel_point_of_interest_learning + has_building_with_flag = travel_point_of_interest_economic + has_building_with_flag = travel_point_of_interest_martial_minor + } + } +} + +journey_martial_skill_monument_trigger = { + OR = { + has_building_with_flag = travel_point_of_interest_martial + has_building_with_flag = travel_point_of_interest_martial_minor + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_learning + NOR = { + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_natural_feature + has_building_with_flag = travel_point_of_interest_martial + has_building_with_flag = travel_point_of_interest_religious + has_building_with_flag = travel_point_of_interest_learning + has_building_with_flag = travel_point_of_interest_economic + has_building_with_flag = travel_point_of_interest_martial_minor + } + } +} + +journey_learning_skill_monument_trigger = { + OR = { + has_building_with_flag = travel_point_of_interest_religious + has_building_with_flag = travel_point_of_interest_learning + NOR = { + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_natural_feature + has_building_with_flag = travel_point_of_interest_martial + has_building_with_flag = travel_point_of_interest_religious + has_building_with_flag = travel_point_of_interest_learning + has_building_with_flag = travel_point_of_interest_economic + has_building_with_flag = travel_point_of_interest_martial_minor + } + } +} + +journey_stewardship_skill_monument_trigger = { + OR = { + has_building_with_flag = travel_point_of_interest_economic + NOR = { + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_natural_feature + has_building_with_flag = travel_point_of_interest_martial + has_building_with_flag = travel_point_of_interest_religious + has_building_with_flag = travel_point_of_interest_learning + has_building_with_flag = travel_point_of_interest_economic + has_building_with_flag = travel_point_of_interest_martial_minor + } + } +} + +journey_intrigue_skill_monument_trigger = { + OR = { + has_building_with_flag = travel_point_of_interest_martial + has_building_with_flag = travel_point_of_interest_martial_minor + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_natural_feature + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_economic + NOR = { + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_natural_feature + has_building_with_flag = travel_point_of_interest_martial + has_building_with_flag = travel_point_of_interest_religious + has_building_with_flag = travel_point_of_interest_learning + has_building_with_flag = travel_point_of_interest_economic + has_building_with_flag = travel_point_of_interest_martial_minor + } + } +} + +inspired_journey_trigger = { + scope:host = { + NAND = { + has_variable_list = extra_journey_target + is_target_in_variable_list = { + name = extra_journey_target + target = root + } + } + } +} + +inspired_journey_value_trigger = { + has_variable_list = extra_journey_target + is_target_in_variable_list = { + name = extra_journey_target + target = scope:province + } +} diff --git a/common/scripted_triggers/00_laamp_triggers.txt b/common/scripted_triggers/00_laamp_triggers.txt new file mode 100644 index 00000000..dd1e2828 --- /dev/null +++ b/common/scripted_triggers/00_laamp_triggers.txt @@ -0,0 +1,935 @@ +################################################## +# Landless Adventurer Camp Scripted Triggers +################################################## + +################################################## +# Interaction Triggers + +maa_regiments_valid_for_cheap_reinforcement_trigger = { + maa_current_troops_count < maa_max_troops_count + NOR = { + is_unit_type = heavy_cavalry + is_unit_type = camel_cavalry + maa_regiments_cost_more_to_reinforce_per_soldier_trigger = yes + } +} + +maa_regiments_cost_more_to_reinforce_per_soldier_trigger = { + regiment_owner = { government_has_flag = government_is_landless_adventurer } + OR = { + is_unit_type = elephant_cavalry + is_unit_type = siege_weapon + } +} + +maa_regiments_valid_to_refill_trigger = { + maa_current_troops_count < maa_max_troops_count + trigger_if = { + limit = { + scope:actor = { government_has_flag = government_is_landless_adventurer } + is_unit_type = elephant_cavalry + } + scope:actor.domicile ?= { has_domicile_parameter = camp_reinforce_elephant_regiments_anywhere } + } +} + +any_laamp_portion_at_sea_trigger = { + OR = { + current_travel_plan ?= { + is_travel_with_domicile = yes + current_location = { + OR = { + is_sea_province = yes + is_river_province = yes + } + } + } + any_army = { + location = { + OR = { + is_sea_province = yes + is_river_province = yes + } + } + } + } +} + +character_is_valid_for_harrying_of_the_north_trigger = { + title:k_england.holder ?= { owns_story_of_type = story_cycle_harrying_of_the_north } + trigger_if = { + limit = { is_ruler = yes } + OR = { + this = title:k_england.holder + any_liege_or_above = { this = title:k_england.holder } + } + } + trigger_else = { + domicile ?= { + domicile_location = { + county ?= { + holder = { + OR = { + this = title:k_england.holder + any_liege_or_above = { this = title:k_england.holder } + } + } + } + } + } + } + OR = { + character_is_valid_anglo_saxon_for_harrying_of_the_north_trigger = yes + character_is_valid_norman_for_harrying_of_the_north_trigger = yes + } +} + +character_is_valid_anglo_saxon_for_harrying_of_the_north_trigger = { + culture = { + OR = { + this = culture:anglo_saxon + any_parent_culture_or_above = { this = culture:anglo_saxon } + } + NOR = { + this = culture:norman + any_parent_culture_or_above = { this = culture:norman } + } + } +} + +character_is_valid_norman_for_harrying_of_the_north_trigger = { + culture = { + OR = { + this = culture:norman + any_parent_culture_or_above = { this = culture:norman } + } + NOR = { + this = culture:anglo_saxon + any_parent_culture_or_above = { this = culture:anglo_saxon } + } + } +} + +disable_interaction_for_hereward_trigger = { + trigger_if = { + limit = { scope:recipient = character:90028 } + custom_tooltip = { + text = owns_a_story_trigger + scope:actor = { + NOR = { + owns_story_of_type = story_cycle_harrying_of_the_north + any_liege_or_above = { owns_story_of_type = story_cycle_harrying_of_the_north } + } + } + } + } +} + +disable_interaction_for_hasan_trigger = { + trigger_if = { + limit = { scope:recipient = character:41702 } + custom_tooltip = { + text = owns_a_story_trigger + scope:recipient = { owns_story_of_type = story_hasan } + } + } +} + +laamp_request_likely_marriable_woman_trigger = { + is_female = yes + is_adult = yes + can_marry_trigger = yes +} + +laamp_request_likely_marriable_man_trigger = { + is_male = yes + is_adult = yes + can_marry_trigger = yes +} + +################################################## +# Transition Triggers + +is_valid_for_laampdom = { + custom_tooltip = { + text = adventurer_not_nf_head_trigger_tt + NOT = { + any_held_title = { is_noble_family_title = yes } + } + } + save_temporary_scope_as = potential_laamp_temp + is_landless_ruler = no # Admin gov vassals should not become laamps + trigger_if = { + limit = { is_ai = yes } + trigger_if = { + limit = { + NOT = { exists = scope:allow_imprisoned_landless } + } + is_imprisoned = no # Must be free + } + is_adult = yes # Old enough to venture forth + age < 60 # Young enough to venture forth + health >= fine_health # Healthy enough to venture forth + OR = { + highest_skill_value >= decent_skill_rating + prowess >= decent_skill_rating + } + # Can't be completely unwilling to go outside. + OR = { + ai_boldness >= low_negative_ai_value + ai_energy >= low_negative_ai_value + } + NOR = { + has_trait = content # Too chill to adventure + has_trait = craven # Too scared to adventure + has_trait = lazy # Too lazy to adventure + } + # Block admin members of noble families + NOT = { + house ?= { + any_house_member = { + any_held_title = { is_noble_family_title = yes } + } + } + } + } +} + +ep3_laamp_interesting_enough_to_be_a_laamp_trigger = { + OR = { + has_trait_rank = { # Prettier + trait = beauty_good + character > $COMPARISON$ + } + has_trait_rank = { # Cleverer + trait = intellect_good + character > $COMPARISON$ + } + has_trait_rank = { # Dencher + trait = physique_good + character > $COMPARISON$ + } + AND = { # Strong people are just more interesting + has_trait = strong + NOT = { + $COMPARISON$ = { has_trait = strong } + } + } + sum_of_all_skills_value > $COMPARISON$.sum_of_all_skills_value # Skillful people are interesting + prowess >= high_skill_rating # Good fighters are interesting + prestige_level > $COMPARISON$.prestige_level # Famous people are interesting + piety_level > $COMPARISON$.piety_level # Religious people are interesting + AND = { # People with nicknames are just more interesting + has_any_nickname = yes + $COMPARISON$ = { has_any_nickname = no } + } + has_character_modifier = bp2_tool_of_fate_modifier # Destiny's child is interesting + has_trait = reincarnation # Reincarnies are interesting + has_trait = immortal + is_twin_of = $COMPARISON$ # Twins are interesting + } +} + +playable_relative_trigger = { + is_playable_character = yes + is_ai = yes + house = root.house +} + +ep3_laamp_interesting_sibling_trigger = { + is_ai = yes # Not already played + is_landed = no # Landless enough to venture forth + NOT = { + any_consort = { + is_ruler = yes + } + } + is_playable_character = no # Not already playable + is_valid_for_laampdom = yes # Age, health, personality + ep3_laamp_interesting_enough_to_be_a_laamp_trigger = { COMPARISON = $COMPARISON$ } +} + +ep3_purchase_land_valid_county_trigger = { + holder.top_liege = scope:recipient + NOR = { + scope:recipient.capital_county ?= this + scope:recipient.primary_title ?= this + } +} + +ep3_negotiate_settlement_valid_county_trigger = { + OR = { + holder = scope:actor + trigger_if = { + limit = { + scope:actor = { government_has_flag = government_is_administrative } + } + holder = { target_is_liege_or_above = scope:actor } + } + } + NOR = { + holder.capital_county ?= this + holder.primary_title ?= this + } +} + +ep3_adventurer_invasion_allowed_for_character_trigger = { + has_ep3_dlc_trigger = yes + government_has_flag = government_is_landless_adventurer + is_landed = no +} + +ep3_adventurer_invasion_allowed_for_character_display_regardless_trigger = { + has_ep3_dlc_trigger = yes + is_at_war = no +} + +ep3_adventurer_landless_allowed_against_character_trigger = { + is_landed = yes + # Players vs. AI filtering. + OR = { + # Can always target the AI. + is_ai = yes + # Cannot target a player unless they completely control at least two duchies. + any_sub_realm_duchy = { + count >= 2 + save_temporary_scope_as = player_controlled_duchy + # Custom description to suppress errors. + custom_description = { + text = SUPPRESS + scope:defender = { completely_controls = scope:player_controlled_duchy } + } + } + } + # Scope:defender cannot be liege of attacker. + scope:defender = { + NOT = { this = scope:attacker.liege } + } +} + +ep3_adventurer_invasion_sponsorship_applies_trigger = { + var:adventurer_invasion_supporter ?= { ep3_adventurer_sponsorship_valid_trigger = yes } + var:adventurer_invasion_target ?= scope:defender +} + +ep3_adventurer_landless_should_invalidate_trigger = { + OR = { + NOT = { + any_in_list = { + list = target_titles + any_in_de_jure_hierarchy = { + tier = tier_county + holder = { + target_is_same_character_or_above = scope:defender + } + } + } + } + scope:attacker = { is_landed = yes } + } +} + +ep3_adventurer_sponsorship_valid_trigger = { + scope:attacker.var:adventurer_invasion_supporter ?= { + var:adventurer_invasion_target ?= scope:defender + NOR = { + this = scope:defender + top_liege = scope:defender.top_liege + is_allied_to = scope:defender + is_spouse_of = scope:defender + AND = { + is_close_family_of = scope:defender + opinion = { + target = scope:defender + value >= -25 + } + } + has_relation_friend = scope:defender + has_relation_lover = scope:defender + any_character_war = { + primary_attacker = scope:attacker.var:adventurer_invasion_supporter + primary_defender = scope:defender + } + } + in_diplomatic_range = scope:defender + } +} + +################################################## +# Contract Triggers + +# Can this employer ever offer this contract? +## This is basically an is_valid_showing_failures_only, so we deliberately break out into lots of unnecessarily small sections for nicer tooltipping. +valid_laamp_basic_trigger = { + custom_description = { + text = adventurer_not_famous_or_patron_trigger_tt + object = $EMPLOYER$ + value = $EMPLOYER$.highest_held_title_tier + OR = { + $EMPLOYER$.highest_held_title_tier <= tier_county + AND = { + $EMPLOYER$.highest_held_title_tier <= tier_duchy + $EMPLOYER$ = { government_has_flag = government_is_nomadic } + } + $EMPLOYER$.highest_held_title_tier <= $LAAMP$.prestige_level + $EMPLOYER$ = { is_contact_of = $LAAMP$ } + } + } + $EMPLOYER$ = { + # Players shouldn't get tangled up in contracts, ever. + is_ai = yes + # Plus some standard stuff. + is_alive = yes + is_adult = yes + NOT = { government_has_flag = government_is_herder } + } + $EMPLOYER$ = { is_incapable = no } + # Laamps shouldn't offer contracts in their local area, ever. + $EMPLOYER$ = { + OR = { + employer = $LAAMP$ + NOT = { government_has_flag = government_is_landless_adventurer } + } + } + # Don't offer to work with those who've wronged us. + ## No one we're at war with. + $EMPLOYER$ = { + NOT = { is_at_war_with = $LAAMP$ } + } + ## Rivals are cheap to avoid. + $EMPLOYER$ = { + NOT = { has_relation_rival = $LAAMP$ } + } + ## Expulsion + $EMPLOYER$ = { + custom_tooltip = { + text = adventurer_expelled_trigger_tt + NOR = { + reverse_has_opinion_modifier = { + target = $LAAMP$ + modifier = demanded_eviction_opinion + } + any_liege_or_above = { + reverse_has_opinion_modifier = { + target = $LAAMP$ + modifier = demanded_eviction_opinion + } + } + } + } + } + $LAAMP$ = { government_has_flag = government_is_landless_adventurer } + $LAAMP$ = { + trigger_if = { + limit = { is_at_war = no } + is_commanding_army = no + } + } + # If we're looking at the player, make sure there's no uhh... weird legacies between us. + $LAAMP$ = { + trigger_if = { + limit = { is_ai = no } + NOR = { + has_any_major_negative_opinion_against_character_trigger = { CHARACTER = $EMPLOYER$ } + $EMPLOYER$ = { + has_any_major_negative_opinion_against_character_trigger = { CHARACTER = $LAAMP$ } + } + } + } + } +} + +# triggers that prevent you from only accepting the contract +valid_laamp_basic_accept_only_trigger = { + is_imprisoned = no +} + +# Should this employer be putting this out for tender? +## Naturally, if they're being becrimed, we don't care about this. +employer_has_treasury_to_offer_job_trigger = { + trigger_if = { + limit = { is_ai = no } + scope:employer.gold >= 50 + } +} + +# Does it make sense that this employer offers this contract to start with? +## So we don't penalise you if their circumstances change beyond your control, but _also_ so that there aren't local job listings going up in Middlesex for someone currently pilgrimaging in Jerusalem. +valid_laamp_sensible_start_trigger = { + scope:employer = { + is_travelling = no + is_in_army = no + is_imprisoned = no + } + trigger_if = { + limit = { + any_character_task_contract = { + count >= 1 + task_contract_employer = scope:employer + } + } + always = no + } +} + +# Prevent inappropriate characters, like the Byzantine Emperor or the Sunni Caliph, from giving contracts that'd seem beneath them. +## This isn't a comment on whether they _would_ (or even did) put out such things, more just trying to preserve verisimilitude. +rule_out_dramatic_laamp_employers_trigger = { + scope:employer = { + NOR = { + faith.religious_head ?= this + highest_held_title_tier >= tier_empire + } + } +} + +# We do not spawn contracts in the Sahara without the right CulTrad. +lock_contracts_from_spawning_in_sahara_trigger = { + OR = { + NOT = { + location = { geographical_region = custom_sahara_proper } + } + culture = { has_cultural_tradition = tradition_saharan_nomads } + } +} + +# How far do we have to travel (or to where) before we start spawning more contracts to play with? +player_adventurer_sufficient_distance_for_contract_spawn_trigger = { + is_ai = no + save_temporary_scope_as = char_temp + OR = { + # Either we've moved to a neighbouring kingdom that we've not been to recently. + AND = { + location.kingdom = { save_temporary_scope_as = kingdom_temp } + NOT = { + is_target_in_variable_list = { + name = laamp_recently_visited_kingdoms + target = scope:kingdom_temp + } + } + } + # Or we've travelled some distance. + trigger_if = { + limit = { exists = scope:char_temp.current_travel_plan } + "location.squared_distance(scope:char_temp.current_travel_plan.departure_location)" >= squared_distance_medium + } + } +} + +# Would this employer have some trait that means they don't want to see/don't trust strangers? +laamp_task_contract_employer_not_antisocial_trigger = { + scope:employer = { + NOR = { + has_trait = shy + has_trait = paranoid + has_trait = cynical + } + } +} + +# Would this employer have someone executed or hurt without (what passes for in-period as) a fair trial? +laamp_task_contract_employer_would_resort_to_violence_trigger = { + scope:employer = { + NOT = { has_trait = compassionate } + } +} + +# Would this employer happily tell a lie or manipulate someone if they at least had a good reason? +laamp_task_contract_employer_would_resort_to_deceit_trigger = { + scope:employer = { + NOT = { has_trait = honest } + } +} + +# Would this employer go grubbing for money they're owed? +laamp_task_contract_employer_would_chase_money_trigger = { + scope:employer = { + NOR = { + has_trait = generous + has_trait = improvident + # Compassionates avoid this unless they're also greedy. + AND = { + has_trait = compassionate + NOT = { has_trait = greedy } + } + } + } +} + +# Check to see if it's appropriate to apply a county modifier — basically, don't let barons putting out contracts apply modifiers to players. +contract_employer_can_apply_county_modifier_trigger = { + OR = { + highest_held_title_tier >= tier_county + liege = { is_ai = yes } + } +} + +# Could this potential rival be removed without unexpectedly affecting a player? +laamp_base_0011_valid_potential_rival_trigger = { + # Exempt players. + NOT = { + this = { is_ai = no } + } +} + +# Search for counties that could be affected by the modifiers we apply at the conclusion of the contract. +laamp_base_1001_valid_neighbouring_county_trigger = { + holder = root.task_contract_employer + county_control < full_county_control +} + +laamp_base_2001_valid_mayor_trigger = { + highest_held_title_tier = tier_barony + government_has_flag = government_is_special_republic + NOT = { is_close_or_extended_family_of = scope:employer } +} + +laamp_base_3001_valid_neighbours_trigger = { + NOR = { + # Don't collect intelligence on people we trust. + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = $EMPLOYER$ } + is_allied_to = $EMPLOYER$ + # Or on people we're currently at war with — it's a little late for court whispers. + is_at_war_with = $EMPLOYER$ + } + is_adult = yes + is_incapable = no + is_imprisoned = no +} + +# used in task contracts triggered from council tasks to check if employer and their liege or councillor are valid to issue a contract for you +# COUNCILLOR_TYPE = councillor type name +# COUNCIL_TASK_TYPE = council task type name +council_task_contract_valid_employer_trigger = { + trigger_if = { + limit = { + NOT = { exists = scope:laamp } + } + save_temporary_scope_as = laamp + } + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer + LAAMP = scope:laamp + } + custom_tooltip = { + text = councillor_leaving_court_message_title + scope:employer = { + OR = { + AND = { + cp:$COUNCILLOR_TYPE$ ?= { + is_performing_council_task = $COUNCIL_TASK_TYPE$ + } + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer.cp:$COUNCILLOR_TYPE$ + LAAMP = scope:laamp + } + } + AND = { + is_performing_council_task = $COUNCIL_TASK_TYPE$ + valid_laamp_basic_trigger = { + EMPLOYER = scope:employer.liege + LAAMP = scope:laamp + } + } + } + } + } +} + +################################################## +# Travel Triggers + +is_laamp_exiled_from_province_trigger = { + $PROVINCE$.county.holder = { + is_laamp_exiled_from_holder_or_liege_trigger = { LAAMP = $LAAMP$ } + } +} + +is_laamp_exiled_from_holder_or_liege_trigger = { + OR = { + AND = { + save_temporary_scope_as = char_temp + $LAAMP$ = { + has_opinion_modifier = { + target = scope:char_temp + modifier = demanded_eviction_opinion + } + } + } + AND = { + any_liege_or_above = { + save_temporary_scope_as = char_temp + $LAAMP$ = { + has_opinion_modifier = { + target = scope:char_temp + modifier = demanded_eviction_opinion + } + } + } + } + } +} + +################################################## +# Event Triggers + +# Do we want this character to occur in events around camp more frequently? +is_valid_active_event_recurrer_trigger = { + is_ai = yes + is_courtier_of = $LIEGE$ + is_healthy = yes + OR = { + has_any_court_position = yes + is_close_or_extended_family_of = $LIEGE$ + is_consort_of = $LIEGE$ + has_important_relationship_with_character_trigger = { CHARACTER = $LIEGE$ } + } +} + +valid_laamp_contract_foe_trigger = { + # Make sure they're at home if possible. + NOR = { + is_travelling = yes + is_commanding_army = yes + is_imprisoned = no + } + # Good sensible restrictions on mutual relationships. + OR = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:employer_ref } + # Ensure a bit of mild dislike. + reverse_opinion = { + target = scope:employer_ref + value <= -25 + } + opinion = { + target = scope:employer_ref + value <= -25 + } + } + NOR = { + # Filter out anything that might look odd. + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:employer_ref } + # Plus don't include anything connected to a player. + save_temporary_scope_as = char_temp + any_player = { + OR = { + this = scope:char_temp + is_close_or_extended_family_of = scope:char_temp + is_consort_of = scope:char_temp + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:char_temp } + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:char_temp } + } + } + } + # And check their location is valid. + location = { + # Which means making sure that they're not located too far away from our contractor. + "squared_distance(root.task_contract_taker.location)" <= squared_distance_large + # And that they're not located in the exact same province, else travel logic'll break. + NOT = { this = scope:employer_ref.location } + } +} + +has_any_landed_title_trigger = { + any_held_title = { + NOR = { + is_noble_family_title = yes + is_landless_type_title = yes + has_variable = adventurer_creation_reason + } + } +} + +# Toggle on tally logging for laamp events, so we can see how often they're firing for a single run test. +enable_debug_laamp_event_logging_toggle_trigger = { always = no } + +# Can the AI create a new laamp without threatening performance? +## Beware of expanding this past the soft-cap figure of around ~200: code estimations were made with this number in mind, so the more we let slip the net, the more they'll start to degrade performance. +### YOU HAVE BEEN WARNED. +ai_can_valid_to_create_laamp_trigger = { + save_temporary_scope_as = char_temp + OR = { + # General checking. + NOT = { has_global_variable_list = laamps_tally } + global_variable_list_size = { + name = laamps_tally + value < max_desired_laamps_value + } + # Player-relevant. + any_player = { + OR = { + is_close_or_extended_family_of = scope:char_temp + is_consort_of = scope:char_temp + has_important_relationship_with_character_trigger = { CHARACTER = scope:char_temp } + is_allied_in_war = scope:char_temp + is_allied_to = scope:char_temp + is_at_war_with = scope:char_temp + } + } + # Encourage legitimists. + AND = { + any_claim = { tier >= tier_kingdom } + global_variable_list_size = { + name = laamps_tally + value < { + value = max_desired_laamps_value + multiply = 1.25 + } + } + } + } +} + +################################################## +# Decisions Triggers + +# We want to refer to this in two places, is_shown and is_valid, within its decision so that we can explain where it's come from. +can_access_reject_inheritance_decision_trigger = { + OR = { + has_trait = content + has_perk = carefree_perk + is_landless_adventurer = yes + } +} + +# Would this character lose opinion with you if you declared "screw that" to your family's titular duties? +would_judge_new_gallivanters_trigger = { + NOR = { + # Traits that innately get it. + has_trait = gallivanter + has_trait = content + # Traits that probably get it if the situation merits it. + calc_true_if = { + amount >= 2 + has_trait = compassionate + has_trait = lazy + has_trait = humble + has_trait = eccentric + } + } + is_adult = yes +} + +butcher_animals_decision_available_dogs_trigger = { + OR = { + custom_tooltip = { + text = butcher_animals_decision.tt.dog.you + has_character_modifier = dog_story_modifier + } + custom_tooltip = { + text = butcher_animals_decision.tt.dog.courtier + any_courtier = { has_character_modifier = dog_story_modifier } + } + domicile = { has_domicile_building = baggage_train_kennel } + } + # Only show the cooldown flag if we already have it, so make our tooltips neater. + trigger_if = { + limit = { has_character_flag = recently_ate_dogs } + custom_tooltip = { + text = butcher_animals_decision.tt.recently_ate_dogs + NOT = { has_character_flag = recently_ate_dogs } + } + } +} + +butcher_animals_decision_available_cats_trigger = { + OR = { + custom_tooltip = { + text = butcher_animals_decision.tt.cat.you + has_character_modifier = cat_story_modifier + } + custom_tooltip = { + text = butcher_animals_decision.tt.cat.courtier + any_courtier = { has_character_modifier = cat_story_modifier } + } + } + # Only show the cooldown flag if we already have it, so make our tooltips neater. + trigger_if = { + limit = { has_character_flag = recently_ate_cats } + custom_tooltip = { + text = butcher_animals_decision.tt.recently_ate_cats + NOT = { has_character_flag = recently_ate_cats } + } + } +} + +butcher_animals_decision_available_horses_trigger = { + OR = { + custom_tooltip = { + text = butcher_animals_decision.tt.horse.you + has_character_modifier = horse_story_modifier + } + domicile = { has_domicile_building = baggage_train_ample_steeds } + } + # Only show the cooldown flag if we already have it, so make our tooltips neater. + trigger_if = { + limit = { has_character_flag = recently_ate_horses } + custom_tooltip = { + text = butcher_animals_decision.tt.recently_ate_horses + NOT = { has_character_flag = recently_ate_horses } + } + } +} + +butcher_animals_decision_available_elephants_trigger = { + domicile = { has_domicile_building = proving_grounds_elephantry_reserve } + # Only show the cooldown flag if we already have it, so make our tooltips neater. + trigger_if = { + limit = { has_character_flag = recently_ate_elephants } + custom_tooltip = { + text = butcher_animals_decision.tt.recently_ate_elephants + NOT = { has_character_flag = recently_ate_elephants } + } + } +} + +laamp_youth_cultural_tradition_trigger = { + has_global_variable_list = laamps_tally + global_variable_list_size = { + name = laamps_tally + value < { + value = max_desired_laamps_value + add = 10 + } + } + culture = { + OR = { + has_cultural_parameter = much_more_likely_to_be_laamps + has_cultural_parameter = more_likely_to_be_laamps + } + } + any_close_or_extended_family_member = { + is_ruler = yes + } + is_lowborn = no + is_ruler = no + is_ai = yes + OR = { + AND = { + exists = liege + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = liege } + } + AND = { + is_male = yes + faith_dominant_gender_male_or_equal = yes + } + AND = { + is_female = yes + faith_dominant_gender_female_or_equal = yes + } + } + trigger_if = { + limit = { + exists = liege + } + liege = { + is_landless_adventurer = no + is_ai = yes + } + } + NOT = { + any_heir_title = { + count >= 1 + } + } +} diff --git a/common/scripted_triggers/00_law_triggers.txt b/common/scripted_triggers/00_law_triggers.txt index 2b3ee5e5..b0a0ba57 100644 --- a/common/scripted_triggers/00_law_triggers.txt +++ b/common/scripted_triggers/00_law_triggers.txt @@ -66,6 +66,7 @@ realm_law_use_crown_authority = { realm_law_use_tribal_authority = no realm_law_use_camp_purpose = no realm_law_use_imperial_bureaucracy = no + realm_law_use_nomadic_authority = no } realm_law_use_tribal_authority = { @@ -77,7 +78,11 @@ realm_law_use_camp_purpose = { } realm_law_use_imperial_bureaucracy = { - has_government = administrative_government + government_has_flag = government_is_administrative +} + +realm_law_use_nomadic_authority = { + government_has_flag = government_is_nomadic } can_have_confederate_partition_succession_law_trigger = { @@ -158,9 +163,7 @@ can_have_high_partition_succession_law_trigger = { } custom_description = { text = succession_laws_must_have_organised_government_tooltip - OR = { - government_has_flag = government_is_feudal - } + government_has_flag = government_is_feudal } } @@ -183,14 +186,34 @@ can_have_single_heir_succession_law_trigger = { has_innovation = innovation_primogeniture } # Non-tribals only - custom_description = { - text = succession_laws_must_have_organised_government_tooltip - OR = { - government_has_flag = government_is_feudal - government_has_flag = government_is_clan + trigger_if = { # We split the tooltip into two, to make sure we don't show admin unless you actually have it + limit = { + has_ep3_dlc_trigger = yes + } + custom_tooltip = { + text = must_be_feudal_clan_or_admin + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_administrative + } } } - NOT = { has_government = administrative_government } + trigger_else = { + custom_description = { + text = succession_laws_must_have_organised_government_tooltip + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + } + } + trigger_if = { + limit = { + government_has_flag = government_is_administrative + } + is_independent_ruler = yes + } } can_keep_single_heir_youngest_succession_law_trigger = { @@ -211,14 +234,34 @@ can_have_single_heir_youngest_succession_law_trigger = { has_innovation = innovation_primogeniture } # Non-tribals only - custom_description = { - text = succession_laws_must_have_organised_government_tooltip - OR = { - government_has_flag = government_is_feudal - government_has_flag = government_is_clan + trigger_if = { # We split the tooltip into two, to make sure we don't show admin unless you actually have it + limit = { + has_ep3_dlc_trigger = yes + } + custom_tooltip = { + text = must_be_feudal_clan_or_admin + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + government_has_flag = government_is_administrative + } } } - NOT = { has_government = administrative_government } + trigger_else = { + custom_description = { + text = succession_laws_must_have_organised_government_tooltip + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + } + } + trigger_if = { + limit = { + government_has_flag = government_is_administrative + } + is_independent_ruler = yes + } } can_keep_single_heir_dynasty_house_trigger = { @@ -261,7 +304,7 @@ can_have_single_heir_dynasty_house_trigger = { government_has_flag = government_is_clan } } - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } } can_have_bishop_theocratic_succession_law_trigger = { @@ -290,28 +333,26 @@ can_have_mercenary_succession_law_trigger = { } can_have_city_succession_law_trigger = { - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic +} + +can_have_herder_succession_law_trigger = { + government_has_flag = government_is_herder } title_can_reduce_partition_law_trigger = { - OR = { - AND = { + holder ?= { + OR = { has_realm_law = single_heir_succession_law - holder = { - can_have_high_partition_succession_law_trigger = yes - } + can_have_high_partition_succession_law_trigger = yes } - AND = { + OR = { has_realm_law = high_partition_succession_law - holder = { - can_have_high_partition_succession_law_trigger = yes - } + can_have_high_partition_succession_law_trigger = yes } - AND = { + OR = { has_realm_law = partition_succession_law - holder = { - can_have_confederate_partition_succession_law_trigger = yes - } + can_have_confederate_partition_succession_law_trigger = yes } } } @@ -330,7 +371,7 @@ can_pass_law_ca3_trigger = { can_have_acclamation_succession_law_trigger = { has_ep3_dlc_trigger = yes - has_government = administrative_government + government_has_flag = government_is_administrative is_independent_ruler = yes } @@ -342,7 +383,7 @@ can_keep_acclamation_succession_law_trigger = { } OR = { can_have_acclamation_succession_law_trigger = yes - has_title = title:e_britannia + has_title = title:e_byzantium } } } @@ -350,3 +391,23 @@ can_keep_acclamation_succession_law_trigger = { can_change_acclamation_succession_law_trigger = { has_ep3_dlc_trigger = yes } + +can_have_appointment_succession_law_trigger = { + has_ep3_dlc_trigger = yes + government_has_flag = government_is_administrative + is_independent_ruler = no +} + +can_keep_appointment_succession_law_trigger = { + has_ep3_dlc_trigger = yes + trigger_if = { + limit = { + has_realm_law = appointment_succession_law + } + can_have_appointment_succession_law_trigger = yes + } +} + +can_change_appointment_succession_law_trigger = { + has_ep3_dlc_trigger = yes +} diff --git a/common/scripted_triggers/00_legal_triggers.txt b/common/scripted_triggers/00_legal_triggers.txt new file mode 100644 index 00000000..7120449f --- /dev/null +++ b/common/scripted_triggers/00_legal_triggers.txt @@ -0,0 +1,129 @@ + +### Legal trigger list + +opposes_succession_law_change_trigger = { + is_imprisoned = no + opinion = { + target = liege + value < 0 + } + custom_description = { + text = law_change_approval_is_cowed + has_dread_level_towards = { + target = liege + level < 2 + } + } +} + +can_change_succession_laws_realm_flag_trigger = { + trigger_if = { + limit = { realm_law_use_tribal_authority = yes } + custom_description = { + text = "has_tribal_law_allowing_succession_law_change" + has_realm_law_flag = can_change_succession_laws + } + } + trigger_else_if = { + limit = { realm_law_use_imperial_bureaucracy = yes } + custom_description = { + text = has_imperial_bureaucracy_law_allowing_succession_law_change + has_realm_law_flag = can_change_succession_laws + } + } + trigger_else = { + custom_description = { + text = "has_crown_law_allowing_succession_law_change" + has_realm_law_flag = can_change_succession_laws + } + } +} + +can_change_succession_law_trigger = { + can_change_succession_laws_realm_flag_trigger = yes + custom_description = { + text = "no_powerful_vassal_with_negative_opinion" + NOT = { + any_vassal = { + is_powerful_vassal = yes + opposes_succession_law_change_trigger = yes + } + } + } +} + +can_change_single_heir_dynasty_house_succession_law_trigger = { + trigger_if = { + limit = { + culture = { has_cultural_pillar = heritage_west_slavic } + NOT = { + has_realm_law_flag = can_change_succession_laws + } + } + culture = { + has_innovation = innovation_table_of_princes + } + } + can_change_succession_laws_realm_flag_trigger = yes + custom_description = { + text = "no_powerful_vassal_with_negative_opinion" + NOT = { + any_vassal = { + is_powerful_vassal = yes + opposes_succession_law_change_trigger = yes + } + } + } +} + +can_change_to_equal_succession_law_trigger = { + trigger_if = { + limit = { + NOT = { has_realm_law_flag = can_change_succession_laws } + } + OR = { + culture = { has_cultural_parameter = gender_equal_inheritance } + faith = { has_doctrine = doctrine_gender_equal } + } + } + can_change_succession_laws_realm_flag_trigger = yes + custom_description = { + text = "no_powerful_vassal_with_negative_opinion" + NOT = { + any_vassal = { + is_powerful_vassal = yes + opposes_succession_law_change_trigger = yes + } + } + } +} + +can_change_partition_succession_law_trigger = { + custom_description = { + text = "has_law_allowing_partition_succession_law_change" + OR = { + has_realm_law_flag = can_change_partition_succession_laws + has_realm_law_flag = can_change_succession_laws + } + } + custom_description = { + text = "no_powerful_vassal_with_negative_opinion" + NOT = { + any_vassal = { + is_powerful_vassal = yes + opposes_succession_law_change_trigger = yes + } + } + } +} + +can_designate_heir_trigger = { + custom_description = { + text = "has_law_allowing_designate_heir" + has_realm_law_flag = can_designate_heirs + } +} + +can_change_title_law_trigger = { + is_at_war = no +} diff --git a/common/scripted_triggers/00_lifestyle_perk_triggers.txt b/common/scripted_triggers/00_lifestyle_perk_triggers.txt new file mode 100644 index 00000000..752612ae --- /dev/null +++ b/common/scripted_triggers/00_lifestyle_perk_triggers.txt @@ -0,0 +1,87 @@ + +# Triggers used in events and actions caused by Lifestyle Perks + + +# extortion_powerful_vassal_trigger: Is this powerful vassal available for extortion? +# extortion_county_trigger: Is this County available for extortion? +# extortion_theocratic_vassal_trigger: Is this Theocratic Vassal available for extortion? + +extortion_powerful_vassal_trigger = { + is_available_ai_adult = yes + NOR = { + has_variable = was_recently_extorted + has_opinion_modifier = { + target = root + modifier = extorted_me_opinion + } + } +} + + +extortion_county_trigger = { + tier = tier_county + NOT = { this = root.capital_county } + county_control >= medium_county_control + NOR = { + has_county_modifier = county_extorted_modifier + has_variable = was_recently_extorted + } +} + +extortion_theocratic_vassal_trigger = { + is_available_ai_adult = yes + government_has_flag = government_is_theocracy + NOR = { + has_variable = was_recently_extorted + has_opinion_modifier = { + target = root + modifier = extorted_me_opinion + } + } +} + +extortion_vassal_at_large_trigger = { + is_available_ai_adult = yes + NOR = { + has_variable = was_recently_extorted + has_opinion_modifier = { + target = root + modifier = extorted_me_opinion + } + } +} + +extortion_courtier_representative_trigger = { + is_available_ai_adult = yes + NOR = { + is_close_family_of = root + has_variable = was_recently_extorted + has_opinion_modifier = { + target = root + modifier = extorted_me_opinion + } + } +} + +# We use a trigger so this can be enabled elsewhere easily. +can_challenge_rival_to_single_combat_trigger = { + # Enabling perks. + OR = { + has_perk = stalwart_leader_perk + culture = { has_cultural_parameter = can_duel_rivals } + government_has_flag = government_is_nomadic + } +} + +rival_single_combat_shown_and_not_invalid_trigger = { + # Scope:actor must be able to fight personally. + scope:actor = { can_start_single_combat_trigger = yes } + # Scope:actor cannot challenge someone they have a ceasefire against. + scope:actor = { + NOT = { has_truce = scope:recipient } + } + # Scope:actor *definitely* cannot challenge someone they're at war with. + scope:actor = { + NOT = { is_at_war_with = scope:recipient } + } +} diff --git a/common/scripted_triggers/00_lifestyle_triggers.txt b/common/scripted_triggers/00_lifestyle_triggers.txt new file mode 100644 index 00000000..f77423ee --- /dev/null +++ b/common/scripted_triggers/00_lifestyle_triggers.txt @@ -0,0 +1,413 @@ +# can_start_new_lifestyle_tree_trigger +# lifestyle_friend_trigger + + +can_start_new_lifestyle_tree_trigger = { + OR = { + NOR = { + has_perk = benevolent_intent_perk + has_perk = firm_hand_perk + } + has_perk = august_perk + has_focus_diplomacy = no + } + OR = { + NOR = { + has_perk = befriend_perk + has_perk = familial_familiar_perk + } + has_perk = family_man_perk + has_focus_diplomacy = no + } + OR = { + NOT = { has_perk = thoughtful_perk } + has_perk = diplomat_perk + has_focus_diplomacy = no + } + OR = { + NOR = { + has_perk = dark_insights_perk + has_perk = dreadful_perk + } + has_perk = torturer_perk + has_focus_intrigue = no + } + OR = { + NOT = { has_perk = truth_is_relative_perk } + has_perk = schemer_perk + has_focus_intrigue = no + } + OR = { + NOR = { + has_perk = like_weed_in_a_garden_perk + has_perk = enticing_opportunity_perk + } + has_perk = seducer_perk + has_focus_intrigue = no + } + OR = { + NOT = { has_perk = anatomical_studies_perk } + has_perk = whole_of_body_perk + has_focus_learning = no + } + OR = { + NOR = { + has_perk = pedagogy_perk + has_perk = scientific_perk + } + has_perk = scholar_perk + has_focus_learning = no + } + OR = { + NOT = { has_perk = faithful_perk } + has_perk = theologian_perk + has_focus_learning = no + } + OR = { + NOT = { has_perk = stalwart_leader_perk } + has_perk = gallant_perk + has_focus_martial = no + } + OR = { + NOT = { has_perk = serve_the_crown_perk } + has_perk = overseer_perk + has_focus_martial = no + } + OR = { + NOT = { has_perk = bellum_justum_perk } + has_perk = strategist_perk + has_focus_martial = no + } + OR = { + NOR = { + has_perk = tax_man_perk + has_perk = cutting_corners_perk + } + has_perk = architect_perk + has_focus_stewardship = no + } + OR = { + NOT = { has_perk = meritocracy_perk } + has_perk = administrator_perk + has_focus_stewardship = no + } + OR = { + NOT = { has_perk = golden_obligations_perk } + has_perk = avaricious_perk + has_focus_stewardship = no + } + OR = { + NOT = { has_perk = mustering_the_troops_perk } + has_perk = surveyor_perk + has_focus_wanderer = no + } + OR = { + NOT = { has_perk = well_prepared_perk } + has_perk = wayfarer_perk + has_focus_wanderer = no + } + OR = { + NOR = { + has_perk = power_at_home_perk + has_perk = mercenary_contacts_perk + } + has_perk = voyager_perk + has_focus_wanderer = no + } +} + +has_completed_current_lifestyle_trigger = { + OR = { + AND = { + OR = { + has_focus = diplomacy_foreign_affairs_focus + has_focus = diplomacy_majesty_focus + has_focus = diplomacy_family_focus + } + has_perk = august_perk + has_perk = family_man_perk + has_perk = diplomat_perk + } + AND = { + OR = { + has_focus = intrigue_skulduggery_focus + has_focus = intrigue_temptation_focus + has_focus = intrigue_intimidation_focus + } + has_perk = torturer_perk + has_perk = schemer_perk + has_perk = seducer_perk + } + AND = { + OR = { + has_focus = learning_medicine_focus + has_focus = learning_scholarship_focus + has_focus = learning_theology_focus + } + has_perk = whole_of_body_perk + has_perk = scholar_perk + has_perk = theologian_perk + } + AND = { + OR = { + has_focus = martial_strategy_focus + has_focus = martial_authority_focus + has_focus = martial_chivalry_focus + } + has_perk = gallant_perk + has_perk = overseer_perk + has_perk = strategist_perk + } + AND = { + OR = { + has_focus = stewardship_wealth_focus + has_focus = stewardship_domain_focus + has_focus = stewardship_duty_focus + } + has_perk = architect_perk + has_perk = administrator_perk + has_perk = avaricious_perk + } + } +} + +has_completed_one_tree_in_current_lifestyle_trigger = { + OR = { + AND = { + OR = { + has_focus = diplomacy_foreign_affairs_focus + has_focus = diplomacy_majesty_focus + has_focus = diplomacy_family_focus + } + OR = { + has_perk = august_perk + has_perk = family_man_perk + has_perk = diplomat_perk + } + } + AND = { + OR = { + has_focus = intrigue_skulduggery_focus + has_focus = intrigue_temptation_focus + has_focus = intrigue_intimidation_focus + } + OR = { + has_perk = torturer_perk + has_perk = schemer_perk + has_perk = seducer_perk + } + } + AND = { + OR = { + has_focus = learning_medicine_focus + has_focus = learning_scholarship_focus + has_focus = learning_theology_focus + } + OR = { + has_perk = whole_of_body_perk + has_perk = scholar_perk + has_perk = theologian_perk + } + } + AND = { + OR = { + has_focus = martial_strategy_focus + has_focus = martial_authority_focus + has_focus = martial_chivalry_focus + } + OR = { + has_perk = gallant_perk + has_perk = overseer_perk + has_perk = strategist_perk + } + } + AND = { + OR = { + has_focus = stewardship_wealth_focus + has_focus = stewardship_domain_focus + has_focus = stewardship_duty_focus + } + OR = { + has_perk = architect_perk + has_perk = administrator_perk + has_perk = avaricious_perk + } + } + } +} + +############################## +# LIFESTYLE FRIEND TRIGGERS +############################## + +#Trigger to check if a friend is a lifestyle friend +lifestyle_friend_trigger = { + trigger_if = { + limit = { $CHARACTER$ = { is_ai = yes } } + OR = { + has_focus = $FOCUS$ + is_ruler = no + } + } + #If a player, check the friend points + trigger_else = { + $FOCUS$_friend_points > 0 + } +} + +#Is the character available as a potential lifestyle friend for CHARACTER +potential_lifestyle_friend_availability_trigger = { + lifestyle_friend_trigger = { CHARACTER = $CHARACTER$ FOCUS = $FOCUS$ } + basic_is_available_ai = yes + NOR = { + has_relation_friend = $CHARACTER$ + has_relation_rival = $CHARACTER$ + is_at_war_with = $CHARACTER$ + } + is_adult = yes + opinion = { + target = $CHARACTER$ + value >= low_negative_opinion + } + save_temporary_scope_value_as = { + name = trigger_focus + value = flag:$FOCUS$ + } + trigger_if = { + limit = { scope:trigger_focus = flag:intrigue_temptation_focus } + NOT = { + dislikes_partner_cheating_trigger = { PARTNER = $CHARACTER$ } + } + } +} + +has_focus_martial = { + OR = { + has_focus = martial_chivalry_focus + has_focus = martial_authority_focus + has_focus = martial_strategy_focus + has_focus = martial_adventurer_focus + } +} + +has_focus_learning = { + OR = { + has_focus = learning_theology_focus + has_focus = learning_scholarship_focus + has_focus = learning_medicine_focus + has_focus = learning_adventurer_focus + } +} + +has_focus_intrigue = { + OR = { + has_focus = intrigue_intimidation_focus + has_focus = intrigue_temptation_focus + has_focus = intrigue_skulduggery_focus + has_focus = intrigue_adventurer_focus + } +} + +has_focus_diplomacy = { + OR = { + has_focus = diplomacy_family_focus + has_focus = diplomacy_majesty_focus + has_focus = diplomacy_foreign_affairs_focus + has_focus = diplomacy_adventurer_focus + } +} + +has_focus_stewardship = { + OR = { + has_focus = stewardship_domain_focus + has_focus = stewardship_wealth_focus + has_focus = stewardship_duty_focus + has_focus = stewardship_adventurer_focus + } +} + +has_focus_wanderer = { + OR = { + has_focus = wanderer_internal_affairs_focus + has_focus = wanderer_journey_focus + has_focus = wanderer_destination_focus + } +} + + +####################### +# misc +####################### + +has_focus_or_focus_trait_trigger = { + save_temporary_scope_value_as = { + name = trigger_focus + value = flag:$FOCUS$ + } + OR = { + has_focus = $FOCUS$ + trigger_if = { + limit = { scope:trigger_focus = flag:diplomacy_foreign_affairs_focus } + has_trait = diplomat + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:diplomacy_majesty_focus } + has_trait = august + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:diplomacy_family_focus } + has_trait = family_first + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:martial_strategy_focus } + has_trait = strategist + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:martial_authority_focus } + has_trait = overseer + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:martial_chivalry_focus } + has_trait = gallant + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:stewardship_wealth_focus } + has_trait = avaricious + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:stewardship_domain_focus } + has_trait = architect + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:stewardship_duty_focus } + has_trait = administrator + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:intrigue_skulduggery_focus } + has_trait = schemer + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:intrigue_temptation_focus } + has_trait = seducer + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:intrigue_intimidation_focus } + has_trait = torturer + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:learning_medicine_focus } + has_trait = whole_of_body + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:learning_scholarship_focus } + has_trait = scholar + } + trigger_else_if = { + limit = { scope:trigger_focus = flag:learning_theology_focus } + has_trait = theologian + } + trigger_else = { + always = no + } + } +} diff --git a/common/scripted_triggers/00_major_decision_triggers.txt b/common/scripted_triggers/00_major_decision_triggers.txt new file mode 100644 index 00000000..68a4cfc2 --- /dev/null +++ b/common/scripted_triggers/00_major_decision_triggers.txt @@ -0,0 +1,226 @@ +###Accuse the Krstjani of Heresy +accuse_krstjani_of_heresy_decision_suitable_krstjani_realm_owner_trigger = { + faith = faith:bosnian_church + realm_size >= 8 + primary_title.tier >= tier_duchy +} + +###Launch the Hungarian Migration +launch_hungarian_migration_ducal_processing_trigger = { + #We're currently processing dukes. + highest_held_title_tier = tier_duchy + #Doesn't hold a valid duchy-tier title in Pannonia. + NOT = { + any_held_title = { + title_capital_county.title_province = { geographical_region = custom_hungary } + tier = tier_duchy + } + } +} + +launch_hungarian_migration_count_processing_trigger = { + #Doesn't hold a valid county-tier title in Pannonia. + NOT = { + any_held_title = { + tier = tier_county + title_province = { geographical_region = custom_hungary } + } + } +} + +launch_hungarian_migration_sub_vassal_liege_pairing_trigger = { + tier = tier_county + #Liege should be a suitable duke within Pannonia. + holder = scope:receiving_vassal.liege + #Double-check that the duke can afford to give a title away. + scope:receiving_vassal.liege = { + any_held_title = { + count >= 2 + tier = tier_county + title_province = { geographical_region = custom_hungary } + } + } +} + +launch_hungarian_migration_direct_vassal_requirements_trigger = { + tier = tier_county + holder = $INVADER$ +} + +launch_hungarian_migration_county_is_within_custom_hungary_trigger = { + tier = tier_county + title_province = { geographical_region = custom_hungary } +} + +launch_hungarian_migration_misplaced_count_suitable_liege_trigger = { + launch_hungarian_migration_county_is_within_custom_hungary_trigger = yes + duchy = { + exists = holder + holder = { + NOT = { this = $INVADER$ } + liege = $INVADER$ + } + } +} + +################################################## +# Danelaw Triggers + +## Colonial Sides +### The decision requires one lowland British party & one colonial Norse party. +negotiate_the_danelaw_british_side_trigger = { + OR = { + culture = { has_cultural_pillar = heritage_west_germanic } + culture = { has_cultural_pillar = heritage_brythonic } + } + NOT = { religion = religion:germanic_religion } +} +negotiate_the_danelaw_norse_side_trigger = { + OR = { + culture = { has_cultural_pillar = heritage_north_germanic } + culture = culture:norman + religion = religion:germanic_religion + } +} + +## Standard Filters +### Does this character meet the basic eligibility requirements? +negotiate_the_danelaw_basic_filter_trigger = { + # Standard filter checks. + is_playable_character = yes + exists = dynasty + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_feudal + government_has_flag = government_is_clan + } + # Must be one of the two valid sides. + OR = { + negotiate_the_danelaw_british_side_trigger = yes + negotiate_the_danelaw_norse_side_trigger = yes + } +} +negotiate_the_danelaw_additional_filter_trigger = { + # Independent only, please. + is_independent_ruler = yes + # Kings & Emperors are too high a rank to make concessions. + highest_held_title_tier <= tier_duchy + # Plus, a capital inside title:k_england. Not strictly necessary, but removes *so* many edge-cases. + capital_county.kingdom = title:k_england +} +negotiate_the_danelaw_standard_filter_trigger = { + negotiate_the_danelaw_basic_filter_trigger = yes + negotiate_the_danelaw_additional_filter_trigger = yes +} + +## Valid Opponent +### Assuming that we have a character who can take the decision (which has stricter requirements), do they have an opponent to negotiate with? +negotiate_the_danelaw_valid_danelaw_opponent_trigger = { + # Standard filter checks. + negotiate_the_danelaw_standard_filter_trigger = yes + # Ensure they match the opposing side. + trigger_if = { + limit = { + root = { negotiate_the_danelaw_british_side_trigger = yes } + } + negotiate_the_danelaw_norse_side_trigger = yes + } + trigger_if = { + limit = { + root = { negotiate_the_danelaw_norse_side_trigger = yes } + } + negotiate_the_danelaw_british_side_trigger = yes + } + # Holds a certain amount of de jure counties within k_england. + save_temporary_scope_as = valid_opponent + title:k_england = { + any_in_de_jure_hierarchy = { + count >= 10 + tier = tier_county + holder = { + OR = { + this = scope:valid_opponent + any_liege_or_above = { this = scope:valid_opponent } + } + } + } + } +} + +################################################## +# Favour the Countryside Basques Triggers + +favour_the_countryside_basques_counts_as_basque_trigger = { + culture = { + OR = { + this = culture:basque + any_parent_culture = { this = culture:basque } + } + } +} + +## We keep these isolated so that we can maintain easy parity between the decision rationales & the event desc rationales. +favour_the_countryside_basques_rationale_negative_piety_level_trigger = { + piety_level < low_piety_level +} + +favour_the_countryside_basques_rationale_sinful_traits_trigger = { + num_sinful_traits >= 2 +} + +favour_the_countryside_basques_rationale_virtuous_basque_pagan_traits_trigger = { + num_virtuous_traits = { + value >= favour_the_countryside_basques_decision_basque_pagan_virtues_tally_value + faith = faith:basque_pagan + } +} + +favour_the_countryside_basques_rationale_excommunicated_trigger = { + has_trait = excommunicated +} + +favour_the_countryside_basques_rationale_naked_cynicism_trigger = { + trigger_if = { + limit = { is_ai = no } + has_trait = cynical + } +} + +favour_the_countryside_basques_rationale_hof_rivalry_trigger = { + AND = { + exists = faith.religious_head + has_relation_rival = faith.religious_head + } +} + +################################################## +# Rebuke Roman Revanchism Triggers + +rebuke_roman_revanchism_counties_controlled_trigger = { + holder = { + OR = { + this = root + top_liege = root + } + } +} + +rebuke_roman_revanchism_counties_controlled_by_ere_trigger = { + exists = title:e_byzantium.holder + holder = { + OR = { + this = title:e_byzantium.holder + top_liege = title:e_byzantium.holder + } + } +} + +rebuke_roman_revanchism_sicily_controls_unlisted_empire_trigger = { + highest_held_title_tier >= tier_empire + primary_title = { + NOR = { + this = title:e_italy + this = title:e_maghreb + } + } +} diff --git a/common/scripted_triggers/00_marriage_triggers.txt b/common/scripted_triggers/00_marriage_triggers.txt new file mode 100644 index 00000000..48c4f18e --- /dev/null +++ b/common/scripted_triggers/00_marriage_triggers.txt @@ -0,0 +1,612 @@ +####MARRIAGE TRIGGER LIST### + +#GENERAL MARRIAGE TRIGGERS +#can_marry_common_trigger +#can_marry_trigger +#could_marry_character_trigger +#can_marry_character_trigger +#marriage_between_characters_unlocks_alliance_of_min_tier_trigger +#can_become_concubine + +#MARRIAGE INTERACTION TRIGGERS + +############################# +# GENERAL MARRIAGE TRIGGERS # +############################# + +# Is allowed to marry (current marriage/concubine status ignored) +can_marry_common_trigger = { + is_alive = yes + NOT = { has_trait_with_flag = can_not_marry } + + trigger_if = { + limit = { + exists = primary_title + } + NOR = { + # Block Mercenaries from marrying or showing up in marriage interactions + primary_title = { + is_mercenary_company = yes + } + is_leading_faction_type = peasant_faction + is_leading_faction_type = populist_faction + government_has_flag = government_is_herder + } + } + + # Clergy cannot marry if their faith disallows it + trigger_if = { + limit = { + is_clergy = yes + } + faith = { + has_doctrine_parameter = clergy_can_marry + } + } + trigger_if = { + limit = { + exists = liege.involved_activity.var:tournament_marriage_prize + this = liege.involved_activity.var:tournament_marriage_prize + } + exists = scope:contest_winner + } +} + +#Can marry right now +can_marry_trigger = { + can_marry_common_trigger = yes + allowed_more_spouses = yes + #To account for a person marrying their concubines please use can_marry_character_trigger +} + +allowed_to_marry_same_sex_trigger = { + has_game_rule = accepted_same_sex_marriage + faith = { + NOR = { + has_doctrine_parameter = homosexuality_shunned + has_doctrine_parameter = homosexuality_illegal + } + } +} + +can_have_children_with = { + sex_opposite_of = $CHARACTER$ # Only opposite sex since for now +} + +allowed_to_marry_character_gender_trigger = { + OR = { + AND = { + allowed_to_marry_same_sex_trigger = yes + sex_same_as = $CHARACTER$ + } + sex_opposite_of = $CHARACTER$ + } +} + +#two characters could potentially marry (does NOT check that they're unmarried) +could_marry_character_trigger = { + save_temporary_scope_as = can_marry_check + can_marry_common_trigger = yes + $CHARACTER$ = { can_marry_common_trigger = yes } + #Opposite genders if you don't have accepted same-sex marriage game rule enabled and your faith supports it + trigger_if = { + limit = { + $CHARACTER$ = { allowed_to_marry_same_sex_trigger = no } + } + sex_opposite_of = $CHARACTER$ + } + #Have you recently divorced this character? + NOT = { + has_opinion_modifier = { + modifier = divorced_me_opinion + target = $CHARACTER$ + } + } + #Faith hostility & consanguinity + trigger_if = { + limit = { NOT = { is_courtier_of = $CHARACTER$ } } #If you're someone's courtier, your liege can marry you anyway + faith = { + faith_allows_marriage_consanguinity_trigger = { + CHARACTER_1 = scope:can_marry_check + CHARACTER_2 = $CHARACTER$ + } + #faith_hostility_level = { + # target = $CHARACTER$.faith + # value < faith_hostility_prevents_marriage_level + #} + } + } + trigger_if = { + limit = { $CHARACTER$ = { NOT = { is_courtier_of = scope:can_marry_check } } } #If you're someone's courtier, your liege can marry you anyway + $CHARACTER$.faith = { + faith_allows_marriage_consanguinity_trigger = { + CHARACTER_1 = scope:can_marry_check + CHARACTER_2 = $CHARACTER$ + } + #faith_hostility_level = { + # target = scope:can_marry_check.faith + # value < faith_hostility_prevents_marriage_level + #} + } + } + trigger_if = { + limit = { + any_close_or_extended_family_member = { + any_spouse = { this = $CHARACTER$ } + } + } + faith = { has_doctrine = doctrine_consanguinity_unrestricted } + $CHARACTER$ = { + faith = { has_doctrine = doctrine_consanguinity_unrestricted } + NOT = { + any_spouse = { + is_close_or_extended_family_of = scope:can_marry_check + NOT = { + faith = { has_doctrine = doctrine_consanguinity_unrestricted } + } + } + } + } + } + # Cannot marry self + NOT = { + scope:can_marry_check = { is_spouse_of = $CHARACTER$ } + } +} + +# Same trigger as above with the exception of the recent divorce trigger +can_take_as_concubine_character_trigger = { + save_temporary_scope_as = can_marry_check + can_marry_common_trigger = yes + $CHARACTER$ = { can_marry_common_trigger = yes } + #Opposite genders if you don't have accepted same-sex marriage game rule enabled and your faith supports it + trigger_if = { + limit = { + $CHARACTER$ = { allowed_to_marry_same_sex_trigger = no } + } + sex_opposite_of = $CHARACTER$ + } + #Faith hostility & consanguinity + trigger_if = { + limit = { NOT = { is_courtier_of = $CHARACTER$ } } #If you're someone's courtier, your liege can marry you anyway + faith = { + faith_allows_marriage_consanguinity_trigger = { + CHARACTER_1 = scope:can_marry_check + CHARACTER_2 = $CHARACTER$ + } + #faith_hostility_level = { + # target = $CHARACTER$.faith + # value < faith_hostility_prevents_marriage_level + #} + } + } + trigger_if = { + limit = { $CHARACTER$ = { NOT = { is_courtier_of = scope:can_marry_check } } } #If you're someone's courtier, your liege can marry you anyway + $CHARACTER$.faith = { + faith_allows_marriage_consanguinity_trigger = { + CHARACTER_1 = scope:can_marry_check + CHARACTER_2 = $CHARACTER$ + } + #faith_hostility_level = { + # target = scope:can_marry_check.faith + # value < faith_hostility_prevents_marriage_level + #} + } + } + NOT = { + scope:can_marry_check = { is_spouse_of = $CHARACTER$ } + } +} + +#Two characters are able to marry right now +can_marry_character_trigger = { + save_temporary_scope_as = can_marry_char_check + OR = { + AND = { + is_betrothed = yes + betrothed = $CHARACTER$ + } + AND = { + can_marry_trigger = yes + $CHARACTER$ = { can_marry_trigger = yes } + } + } + trigger_if = { + limit = { + $CHARACTER$ = { is_concubine = yes } + } + $CHARACTER$ = { is_concubine_of = scope:can_marry_char_check } + } + trigger_if = { + limit = { + is_concubine = yes + } + is_concubine_of = $CHARACTER$ + $CHARACTER$ = { could_marry_character_trigger = { CHARACTER = scope:can_marry_char_check } } #Gender, recent divorce, allowed to marry, no illegal incest etc.} If they're your concubine you're rules are the ones looked at + } + trigger_else = { + could_marry_character_trigger = { CHARACTER = $CHARACTER$ } #Gender, recent divorce, allowed to marry, no illegal incest etc. + } +} + +#A marriage between MY_CHARACTER and THEIR_CHARACTER would give alliance/would unlock renegotiate alliance for current scope where current scope's ally would be at least TIER +marriage_between_characters_unlocks_alliance_of_min_tier_trigger = { + save_temporary_scope_as = alliance_unlocker + $MY_CHARACTER$ = { + OR = { + this = scope:alliance_unlocker + is_close_family_of = scope:alliance_unlocker + } + } + #todo shouldn't this use yields_alliance trigger + $THEIR_CHARACTER$ = { + OR = { + AND = { + is_ruler = yes + highest_held_title_tier >= $TIER$ + } + any_close_family_member = { + is_ruler = yes + highest_held_title_tier >= $TIER$ + } + } + } +} + +can_become_concubine_of_character_trigger = { + is_hostage = no + trigger_if = { + limit = { + NOT = { is_imprisoned_by = $CHARACTER$ } + } + is_married = no + is_betrothed = no + is_concubine = no + number_of_concubines = 0 + } + trigger_if = { + limit = { + is_imprisoned_by = $CHARACTER$ + is_married = yes + } + NOT = { is_spouse_of = $CHARACTER$ } + } + NOR = { + is_concubine_of = $CHARACTER$ + has_character_flag = has_been_offered_as_concubine + } + is_ruler = no + is_playable_character = no + is_adult = yes + could_marry_character_trigger = { CHARACTER = $CHARACTER$ } #Gender, recent divorce, allowed to marry, no illegal incest etc. +} + +# Same as above, switching out could_marry_character_trigger for can_take_as_concubine_character_trigger, in order to better inform the player that they cannot take their ex-spouse as a concubine +can_become_concubine_of_character_valid_trigger = { + trigger_if = { + limit = { + NOT = { is_imprisoned_by = $CHARACTER$ } + } + is_married = no + is_betrothed = no + is_concubine = no + number_of_concubines = 0 + } + trigger_if = { + limit = { + is_imprisoned_by = $CHARACTER$ + is_married = yes + } + NOT = { is_spouse_of = $CHARACTER$ } + } + NOR = { + is_concubine_of = $CHARACTER$ + has_character_flag = has_been_offered_as_concubine + } + is_ruler = no + is_playable_character = no + is_adult = yes + can_take_as_concubine_character_trigger = { CHARACTER = $CHARACTER$ } #Gender, allowed to marry, no illegal incest etc. +} + +can_be_offered_as_concubine_to_character_trigger = { + trigger_if = { + limit = { + NOT = { is_imprisoned_by = $GIVER$ } + } + is_married = no + is_betrothed = no + OR = { + is_concubine = no + is_concubine_of = $GIVER$ + } + number_of_concubines = 0 + } + trigger_if = { + limit = { + is_imprisoned_by = $GIVER$ + is_married = yes + } + NOR = { + is_spouse_of = $CHARACTER$ + is_spouse_of = $GIVER$ + } + } + NOR = { + is_concubine_of = $CHARACTER$ + has_character_flag = has_been_offered_as_concubine + } + is_ruler = no + is_playable_character = no + is_adult = yes + NOT = { + is_theocratic_lessee = yes + } + could_marry_character_trigger = { CHARACTER = $CHARACTER$ } #Gender, recent divorce, allowed to marry, no illegal incest etc. +} + +ready_to_marry_betrothed_trigger = { + trigger_if = { + limit = { exists = betrothed } + is_adult = yes + betrothed = { is_adult = yes } + } + trigger_else = { + always = no + } +} + +################################# +# MARRIAGE INTERACTION TRIGGERS # +################################# + +marriage_interaction_can_be_picked_trigger = { + can_marry_trigger = yes + is_imprisoned = no + is_hostage = no +} + +marriage_interaction_valid_target_trigger = { + # Clergy cannot marry if their faith doesn't allow it + trigger_if = { + limit = { + scope:secondary_actor = { + is_clergy = yes + NOT = { + faith = { + has_doctrine_parameter = clergy_can_marry + } + } + } + } + custom_description = { + text = character_is_clergy_and_cannot_marry + subject = scope:secondary_actor + object = scope:secondary_recipient + scope:secondary_actor = { + is_clergy = no + } + } + } + trigger_else_if = { + limit = { + scope:secondary_recipient = { + is_clergy = yes + NOT = { + faith = { + has_doctrine_parameter = clergy_can_marry + } + } + } + } + custom_description = { + text = character_is_clergy_and_cannot_marry + subject = scope:secondary_recipient + object = scope:secondary_actor + scope:secondary_recipient = { + is_clergy = no + } + } + } + #Marriage + trigger_else_if = { + limit = { + scope:secondary_actor = { is_adult = yes } + scope:secondary_recipient = { is_adult = yes } + } + scope:secondary_actor = { + custom_description = { + text = "can_marry_check_secondary_actor" + subject = scope:secondary_actor + object = scope:secondary_recipient + can_marry_character_trigger = { CHARACTER = scope:secondary_recipient } #Checks marriage status, betrothed, gender, consanguinity, faith hostility etc. + } + } + } + #Betrothal + trigger_else = { + scope:secondary_actor = { + custom_description = { + text = "can_betroth_check_secondary_actor" + subject = scope:secondary_actor + object = scope:secondary_recipient + can_marry_character_trigger = { CHARACTER = scope:secondary_recipient } #Checks marriage status, betrothed, gender, consanguinity, faith hostility etc. + } + } + } + + # If the actor is ai they will not pick a character already considered for concubinage + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + NOR = { + scope:secondary_actor = { has_character_flag = has_been_offered_as_concubine } + scope:secondary_recipient = { has_character_flag = has_been_offered_as_concubine } + } + } +} + +marriage_interaction_auto_accept_trigger = { + trigger_if = { + limit = { + exists = scope:secondary_actor.betrothed + scope:secondary_actor = { + has_been_promised_grand_wedding = yes + } + } + always = no + } + trigger_else_if = { + limit = { + exists = scope:secondary_actor.betrothed + } + custom_description = { + text = is_betrothed_auto_accept + subject = scope:secondary_actor + object = scope:secondary_recipient + scope:secondary_actor.betrothed = scope:secondary_recipient + } + } + trigger_else_if = { + limit = { + scope:hook = yes + } + #Strong hook = 100% accept (unless marrying 1st or 2nd player heir or the ruler and asking for matrilineal/partrilineal resulting in no dynasty children for them) + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:actor = { has_strong_hook = scope:recipient } + scope:recipient = { + NAND = { + #Secondary recipient can't be recipient or 1st/2nd heir... + OR = { + this = scope:secondary_recipient + player_heir_position = { + target = scope:secondary_recipient + value <= 2 + } + } + #...if the marriage (matrilineal/patrilineal) does not match their gender + OR = { + scope:secondary_recipient = { + is_female = yes + NOT = { always = scope:matrilineal } + } + scope:secondary_recipient = { + is_male = yes + always = scope:matrilineal + } + } + } + } + } + } + trigger_else = { + always = no + } +} + +make_concubine_is_shown_trigger = { + scope:actor = { + allowed_concubines = yes + is_adult = yes + } + scope:recipient = { + OR = { + is_courtier_of = scope:actor + is_imprisoned_by = scope:actor + } + can_become_concubine_of_character_valid_trigger = { CHARACTER = scope:actor } + } +} + +make_concubine_is_valid_trigger = { + custom_description = { + text = take_concubine_allowed_more + object = scope:recipient + scope:actor = { + allowed_more_concubines = yes + } + } + scope:recipient = { + custom_tooltip = { + text = take_concubine_ex_spouse + NOT = { + has_opinion_modifier = { + modifier = divorced_me_opinion + target = scope:actor + } + } + } + is_busy_in_events_localised = yes + OR = { + AND = { + is_imprisoned_by = scope:actor + is_married = yes + } + is_married = no + } + is_hostage = no + } +} + +marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = { + trigger_if = { + limit = { + scope:$TARGET$ ?= { + is_diarch = yes + # We're only concerned about landed rulers, those who might be married out of their own court. + is_ruler = no + } + } + custom_tooltip = { + text = arrange_marriage_interaction.tt.non_loyal_regents_refuse_to_be_married_off.$TARGET$ + scope:$TARGET$ = { diarch_loyalty >= diarch_loyalty_visibly_loyal_threshold } + } + } +} + +wants_very_young_wife = { + is_female = no + is_adult = no +} + +wants_young_wife = { + is_female = no + is_adult = yes + age < 30 + NOT = { + any_child = { + count >= 2 + is_alive = yes + NOT = { has_trait = bastard } + } + } +} + +will_not_be_very_young_wife = { + is_female = yes + is_very_young_character = no +} + +will_not_be_young_wife = { + is_female = yes + is_young_character = no +} + +will_not_be_fertile_wife = { + is_female = yes + is_aging_character = yes +} + +is_ruler_or_close_family = { + OR = { + is_ruler = yes + any_close_family_member = { + even_if_dead = yes + is_ruler = yes + } + } +} diff --git a/common/scripted_triggers/00_military_triggers.txt b/common/scripted_triggers/00_military_triggers.txt new file mode 100644 index 00000000..04bdf858 --- /dev/null +++ b/common/scripted_triggers/00_military_triggers.txt @@ -0,0 +1,30 @@ +#Triggers handling questions of military and warfare + +#Checks whether scope character has greater military strength than the ratio specified +military_strength_greater_than_ratio_trigger = { + save_temporary_scope_value_as = { + name = ratio + + value = { + value = max_military_strength + divide = $TARGET$.max_military_strength + } + } + + scope:ratio > $RATIO$ +} + +valid_for_maa_trigger = { + OR = { + AND = { + is_landless_adventurer = yes + has_perk = planned_cultivation_perk + location.county.culture ?= { has_cultural_parameter = $PARAMETER$ } + } + culture = { has_cultural_parameter = $PARAMETER$ } + } +} + +valid_for_nomadic_riders_trigger = { + government_has_flag = government_is_nomadic +} \ No newline at end of file diff --git a/common/scripted_triggers/00_opinion_scripted_triggers.txt b/common/scripted_triggers/00_opinion_scripted_triggers.txt new file mode 100644 index 00000000..065e4da1 --- /dev/null +++ b/common/scripted_triggers/00_opinion_scripted_triggers.txt @@ -0,0 +1,338 @@ +################################################## +# Positive Opinion Triggers +has_good_opinion_of_character_trigger = { + opinion = { + value >= 25 + target = $CHARACTER$ + } +} + +has_good_opinion_of_root_trigger = { + opinion = { + value >= 25 + target = root + } +} + +################################################## +# Negative Opinion Triggers + +has_bad_opinion_of_character_trigger = { + opinion = { + value <= -25 + target = $CHARACTER$ + } +} + +has_bad_opinion_of_root_trigger = { + opinion = { + value <= -25 + target = root + } +} + +has_moderate_bad_opinion_of_character_trigger = { + opinion = { + value <= -50 + target = $CHARACTER$ + } +} + +has_moderate_bad_opinion_of_root_trigger = { + opinion = { + value <= -50 + target = root + } +} + +has_really_bad_opinion_of_character_trigger = { + opinion = { + value <= -75 + target = $CHARACTER$ + } +} + +has_really_bad_opinion_of_root_trigger = { + opinion = { + value <= -75 + target = root + } +} + +# Do I have any prior quarrel with this character? +has_any_major_negative_opinion_against_character_trigger = { + OR = { + has_any_war_opinion_against_character_trigger = { CHARACTER = $CHARACTER$ } + has_any_major_revenge_opinion_against_character_trigger = { CHARACTER = $CHARACTER$ } + } +} + +# Has this character declared war on me close enough that I remember it? +has_any_war_opinion_against_character_trigger = { + OR = { + has_opinion_modifier = { + modifier = declared_war + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = declared_war_on_son_daughter + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = vassal_lost_faction_revolt_war + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = vassal_wp_faction_revolt_war + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = peasant_revolt_opinion + target = $CHARACTER$ + } + } +} + +# Did this character do something awful to me or my family? +has_any_major_revenge_opinion_against_character_trigger = { + OR = { + has_opinion_modifier = { + modifier = imprisoned_me + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = banished_me + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = demanded_taking_vows + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = killed_my_child + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = treachery_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = treasonous_revoke_refusal + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = treasonous_imprison_refusal + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = treasonous_disobeyed_diarch + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = abductor_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = attempted_murder_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = botched_my_treatment_crime_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = botched_treatment_of_kin_crime_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = failed_to_treat_me_crime_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = failed_to_treat_kin_crime_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = theft_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = embezzled_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = attempted_arrest_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = attempted_imprisonment_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = rebellious_vassal_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = plotting_against_liege_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = spying_on_liege_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = abducted_me_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = attempted_abduction_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = elopement_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = attempted_elopement_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = murdered_close_family_crime + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = attempted_murder_close_family_crime + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = attempted_murder_me_crime + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = murdered_close_relation_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = murdered_someone_close_to_me_crime + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = hurt_someone_close_to_me_crime + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = murdered_my_vassal_crime + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = executed_close_family + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = executed_close_family_crime + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = executed_dynasty_member + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = executed_close_relation_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = executed_family_sun_trial_modifier + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = executed_my_countryman_modifier + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = tortured_family_member + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = tortured_me + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = blinded_family_member + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = blinded_me + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = castrated_family_member + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = castrated_me + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = attempted_to_steal_artifact_from_me + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = stole_artifact_from_me + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = slept_with_spouse_discovered_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = slept_with_spouse_exposed_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = unfaithful_spouse_discovered_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = unfaithful_spouse_exposed_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = refused_to_renounce_lover_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = betrayed_our_promise + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = loved_one_dungeon_death + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = reason_child_died + target = $CHARACTER$ + } + } +} + +# Did this character do something irksome to me or my family? +has_any_petty_revenge_opinion_against_character_trigger = { + OR = { + has_opinion_modifier = { + modifier = insulted_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = smeared_opinion + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = mocked_me_in_time_of_need + target = $CHARACTER$ + } + has_opinion_modifier = { + modifier = abandoned_me_opinion + target = $CHARACTER$ + } + } +} diff --git a/common/scripted_triggers/00_personality_trait_triggers.txt b/common/scripted_triggers/00_personality_trait_triggers.txt new file mode 100644 index 00000000..cf862749 --- /dev/null +++ b/common/scripted_triggers/00_personality_trait_triggers.txt @@ -0,0 +1,192 @@ +########################################################################################################################## +# +# These triggers all check for character flags which can be applied by the effects in '00_personality_trait_effects.txt' +# Used to determine if those effects successfully ran, and if they are still valid. + +personality_has_any_trait_flag_trigger = { + OR = { + scope:has_opposing_trait = flag:arrogant + scope:has_opposing_trait = flag:humble + scope:has_opposing_trait = flag:lustful + scope:has_opposing_trait = flag:chaste + scope:has_opposing_trait = flag:gregarious + scope:has_opposing_trait = flag:shy + scope:has_opposing_trait = flag:generous + scope:has_opposing_trait = flag:greedy + scope:has_opposing_trait = flag:ambitious + scope:has_opposing_trait = flag:content + scope:has_opposing_trait = flag:impatient + scope:has_opposing_trait = flag:patient + scope:has_opposing_trait = flag:temperate + scope:has_opposing_trait = flag:gluttonous + scope:has_opposing_trait = flag:diligent + scope:has_opposing_trait = flag:lazy + scope:has_opposing_trait = flag:wrathful + scope:has_opposing_trait = flag:calm + scope:has_opposing_trait = flag:deceitful + scope:has_opposing_trait = flag:honest + scope:has_opposing_trait = flag:craven + scope:has_opposing_trait = flag:brave + scope:has_opposing_trait = flag:arbitrary + scope:has_opposing_trait = flag:just + scope:has_opposing_trait = flag:cynical + scope:has_opposing_trait = flag:zealous + scope:has_opposing_trait = flag:paranoid + scope:has_opposing_trait = flag:trusting + scope:has_opposing_trait = flag:compassionate + scope:has_opposing_trait = flag:callous + scope:has_opposing_trait = flag:sadistic + scope:has_opposing_trait = flag:forgiving + scope:has_opposing_trait = flag:vengeful + scope:has_opposing_trait = flag:stubborn + scope:has_opposing_trait = flag:fickle + } +} + + + +#Checks if we can safely run the +personality_can_trait_shift = { + OR = { + AND = { + scope:has_opposing_trait = flag:arrogant + has_trait = arrogant + } + AND = { + scope:has_opposing_trait = flag:humble + has_trait = humble + } + AND = { + scope:has_opposing_trait = flag:lustful + has_trait = lustful + } + AND = { + scope:has_opposing_trait = flag:chaste + has_trait = chaste + } + AND = { + scope:has_opposing_trait = flag:gregarious + has_trait = gregarious + } + AND = { + scope:has_opposing_trait = flag:shy + has_trait = shy + } + AND = { + scope:has_opposing_trait = flag:generous + has_trait = generous + } + AND = { + scope:has_opposing_trait = flag:greedy + has_trait = greedy + } + AND = { + scope:has_opposing_trait = flag:ambitious + has_trait = ambitious + } + AND = { + scope:has_opposing_trait = flag:content + has_trait = content + } + AND = { + scope:has_opposing_trait = flag:impatient + has_trait = impatient + } + AND = { + scope:has_opposing_trait = flag:patient + has_trait = patient + } + AND = { + scope:has_opposing_trait = flag:temperate + has_trait = temperate + } + AND = { + scope:has_opposing_trait = flag:gluttonous + has_trait = gluttonous + } + AND = { + scope:has_opposing_trait = flag:diligent + has_trait = diligent + } + AND = { + scope:has_opposing_trait = flag:lazy + has_trait = lazy + } + AND = { + scope:has_opposing_trait = flag:wrathful + has_trait = wrathful + } + AND = { + scope:has_opposing_trait = flag:calm + has_trait = calm + } + AND = { + scope:has_opposing_trait = flag:deceitful + has_trait = deceitful + } + AND = { + scope:has_opposing_trait = flag:honest + has_trait = honest + } + AND = { + scope:has_opposing_trait = flag:craven + has_trait = craven + } + AND = { + scope:has_opposing_trait = flag:brave + has_trait = brave + } + AND = { + scope:has_opposing_trait = flag:arbitrary + has_trait = arbitrary + } + AND = { + scope:has_opposing_trait = flag:just + has_trait = just + } + AND = { + scope:has_opposing_trait = flag:cynical + has_trait = cynical + } + AND = { + scope:has_opposing_trait = flag:zealous + has_trait = zealous + } + AND = { + scope:has_opposing_trait = flag:paranoid + has_trait = paranoid + } + AND = { + scope:has_opposing_trait = flag:trusting + has_trait = trusting + } + AND = { + scope:has_opposing_trait = flag:compassionate + has_trait = compassionate + } + AND = { + scope:has_opposing_trait = flag:callous + has_trait = callous + } + AND = { + scope:has_opposing_trait = flag:sadistic + has_trait = sadistic + } + AND = { + scope:has_opposing_trait = flag:forgiving + has_trait = forgiving + } + AND = { + scope:has_opposing_trait = flag:vengeful + has_trait = vengeful + } + AND = { + scope:has_opposing_trait = flag:stubborn + has_trait = stubborn + } + AND = { + scope:has_opposing_trait = flag:fickle + has_trait = fickle + } + } +} diff --git a/common/scripted_triggers/00_personality_triggers.txt b/common/scripted_triggers/00_personality_triggers.txt new file mode 100644 index 00000000..af7337eb --- /dev/null +++ b/common/scripted_triggers/00_personality_triggers.txt @@ -0,0 +1,245 @@ + +###PERSONALITY TRIGGER LIST + +# has_personality_malicious_trigger - someone who is deceitful/uncaring/selfish/doesn't mind hurting others +# has_personality_benevolent_trigger - a kind soul who is likely to be helpful +# has_personality_dominant_trigger - someone with high confidence who is in control (or wants to be) +# has_personality_submissive_trigger - someone with low confidence or who is fine with obeying others +# has_personality_extroverted_trigger - someone who likes to interact with others +# has_personality_introverted_trigger - someone who is shy/chaste/scared +# has_personality_emotional_trigger - someone whose actions are easily swayed by their emotions +# has_personality_levelheaded_trigger - someone who is always in control or is indifferent +# has_personality_annoying_trigger - someone who gossips, meddles, disturbs etc. +# probably_intelligent_trigger +# probably_unintelligent_trigger + + +############################# +#SUPPORTING TRAITS TRIGGERS +############################ + +has_trait_malicious_trigger = { + OR = { + has_trait = deceitful + has_trait = arbitrary + has_trait = callous + has_trait = sadistic + has_trait = vengeful + has_trait = rowdy + } +} + +has_trait_benevolent_trigger = { + OR = { + has_trait = generous + has_trait = just + has_trait = compassionate + has_trait = forgiving + } +} + +has_trait_dominant_trigger = { + OR = { + has_trait = arrogant + has_trait = brave + has_trait = ambitious + has_trait = stubborn + has_trait = bossy + has_trait = rowdy + } +} + +has_trait_submissive_trigger = { + OR = { + has_trait = craven + has_trait = humble + has_trait = content + has_trait = fickle + } +} + +has_trait_extroverted_trigger = { + OR = { + has_diplomacy_lifestyle_trait_trigger = yes + has_trait = seducer + has_trait = lustful + has_trait = gregarious + has_trait = curious + has_trait = charming + } +} + +has_trait_introverted_trigger = { + OR = { + has_trait = celibate + has_trait = chaste + has_trait = craven + has_trait = shy + has_trait = pensive + } +} + +has_trait_emotional_trigger = { + OR = { + has_trait = wrathful + has_trait = impatient + has_trait = paranoid + has_trait = compassionate + has_trait = vengeful + has_trait = drunkard + has_trait = depressed + has_trait = lunatic + has_trait = possessed + } +} + +has_trait_levelheaded_trigger = { + OR = { + has_trait = temperate + has_trait = calm + has_trait = patient + has_trait = callous + has_trait = pensive + } +} + +has_trait_schemy_trigger = { + OR = { + has_trait = deceitful + has_trait = callous + has_trait = ambitious + has_trait = vengeful + has_trait = disloyal + } +} + + +######################### +#PERSONALITY TRIGGERS +########################## + +has_personality_malicious_trigger = { + has_trait_malicious_trigger = yes + has_trait_benevolent_trigger = no +} + + +has_personality_benevolent_trigger = { + has_trait_benevolent_trigger = yes + has_trait_malicious_trigger = no +} + +has_personality_dominant_trigger = { + has_trait_dominant_trigger = yes + has_trait_submissive_trigger = no +} + +has_personality_submissive_trigger = { + has_trait_submissive_trigger = yes + has_trait_dominant_trigger = no +} + +has_personality_extroverted_trigger = { + has_trait_extroverted_trigger = yes + has_trait_introverted_trigger = no +} + +has_personality_introverted_trigger = { + has_trait_introverted_trigger = yes + has_trait_extroverted_trigger = no +} + +has_personality_emotional_trigger = { + has_trait_emotional_trigger = yes + has_trait_levelheaded_trigger = no +} + +has_personality_levelheaded_trigger = { + has_trait_levelheaded_trigger = yes + has_trait_emotional_trigger = no +} + +has_personality_annoying_trigger = { + OR = { + has_trait = gluttonous + has_trait = lazy + has_trait = arrogant + has_trait = drunkard + has_trait = stubborn + has_trait = paranoid + has_trait = lunatic + has_trait = possessed + has_trait = curious + has_trait = rowdy + } +} + +#Intelligence estimations +probably_intelligent_trigger = { + OR = { + has_trait_rank = { + trait = intellect_good + rank > 0 + } + has_trait = shrewd + } +} + +probably_unintelligent_trigger = { + OR = { + has_trait_rank = { + trait = intellect_bad + rank > 0 + } + has_trait = dull + has_trait = inbred + } +} + +# Other personality checks +untrustworthy_trigger = { + OR = { + has_trait = deceitful + has_trait = arbitrary + has_trait = disloyal + } +} + +loves_food_trigger = { + NOR = { + has_trait = inappetetic + has_trait = temperate + } + OR = { + has_trait = comfort_eater + has_trait = gluttonous + has_court_position = food_taster_court_position + } +} + +probably_superstitious = { + OR = { + learning <= mediocre_skill_rating + has_trait = intellect_bad + has_trait = dull + has_trait = eccentric + has_trait = paranoid + has_trait = lifestyle_herbalist + is_witch_trigger = yes + has_character_modifier = bp1_superstition_modifier + } +} + +probably_anti_superstitious = { + probably_superstitious = no + OR = { + learning >= high_skill_rating + has_trait = intellect_good + has_trait = shrewd + has_trait = cynical + has_trait = zealous + has_trait = theologian + } +} + + diff --git a/common/scripted_triggers/00_pet_triggers.txt b/common/scripted_triggers/00_pet_triggers.txt new file mode 100644 index 00000000..48f2408c --- /dev/null +++ b/common/scripted_triggers/00_pet_triggers.txt @@ -0,0 +1,116 @@ + +#Triggers revolving around pets + +has_cat_or_dog_trigger = { + OR = { + has_cat_trigger = yes + has_dog_trigger = yes + } +} + +has_named_cat_or_dog_trigger = { + OR = { + has_named_cat_trigger = yes + has_named_dog_trigger = yes + } +} + +has_cat_trigger = { + any_owned_story = { + story_type = story_cycle_pet_cat + } +} + +has_named_cat_trigger = { + any_owned_story = { + story_type = story_cycle_pet_cat + } + exists = var:story_cycle_cat_name +} + +has_dog_trigger = { + any_owned_story = { + story_type = story_cycle_pet_dog + } +} + +has_eagle_trigger = { + any_owned_story = { + story_type = story_cycle_pet_eagle + } +} + +has_available_eagle_trigger = { + any_owned_story = { + story_type = story_cycle_pet_eagle + } + NOR = { + has_character_flag = eagle_is_missing + has_character_flag = eagle_is_dying + } +} + +eagle_is_old_trigger = { + has_eagle_trigger = yes + exists = var:eagle_age_variable + var:eagle_age_variable >= 15 +} + +has_named_eagle_trigger = { + any_owned_story = { + story_type = story_cycle_pet_eagle + } + exists = var:story_cycle_eagle_name +} + +has_named_dog_trigger = { + any_owned_story = { + story_type = story_cycle_pet_dog + } + exists = var:story_cycle_dog_name +} + +has_alive_pet_trigger = { + OR = { + has_named_cat_trigger = yes + has_named_dog_trigger = yes + has_named_eagle_trigger = yes + has_character_modifier = exotic_pet_wolf + has_character_modifier = exotic_pet_bear + has_character_modifier = exotic_pet_lion + has_character_modifier = exotic_pet_tiger + } +} + +has_exotic_pet_trigger = { + OR = { + has_character_modifier = exotic_pet_wolf + has_character_modifier = exotic_pet_bear + has_character_modifier = exotic_pet_lion + has_character_modifier = exotic_pet_tiger + } +} + +has_eagle_personality_trait_trigger = { + OR = { + has_character_modifier = brave_eagle_story_modifier + has_character_modifier = curious_eagle_story_modifier + has_character_modifier = loyal_eagle_story_modifier + has_character_modifier = calm_eagle_story_modifier + has_character_modifier = wise_eagle_story_modifier + has_character_modifier = cunning_eagle_story_modifier + } +} + +has_secondary_eagle_personality_trait_trigger = { + has_variable = eagle_personality_trait_2 +} + +can_laamp_sell_eagle_trigger = { + location = { has_holding_type = nomad_holding } + has_available_eagle_trigger = yes + NOT = { scope:laamp_artifact_peddler = { has_eagle_trigger = yes } } + NOT = { has_character_flag = cant_sell_eagle } # Cooldown or somewhat healthy eagle + NOT = { exists = scope:1020_second_artifact_to_sell } # Should only have one artifact to sell + short_term_gold <= minor_gold_laamps_value # Out of desperation +} \ No newline at end of file diff --git a/common/scripted_triggers/00_physical_appearance_triggers.txt b/common/scripted_triggers/00_physical_appearance_triggers.txt new file mode 100644 index 00000000..063904d9 --- /dev/null +++ b/common/scripted_triggers/00_physical_appearance_triggers.txt @@ -0,0 +1,41 @@ + +##TRIGGER LIST +# has_conventionally_attractive_trigger +# has_conventionally_ugly_trigger +# has_permanent_physical_injury - checks if you have some permanent injury +# + +has_conventionally_attractive_trigger = { + OR = { + has_trait = beauty_good + AND = { + has_trait = strong + NOT = { has_trait = beauty_bad } + } + } +} + +has_conventionally_ugly_trigger = { + OR = { + has_trait = beauty_bad + has_trait = hunchbacked + has_trait = one_legged + has_trait = scarred + has_trait = one_eyed + has_trait = scaly + has_trait = great_pox + has_trait = dwarf + has_trait = albino + } +} + +has_permanent_physical_injury = { + OR = { + has_trait = one_legged + has_trait = one_eyed + has_trait = scarred + has_trait = maimed + is_eunuch_trigger = yes + has_trait = blind + } +} diff --git a/common/scripted_triggers/00_pilgrimage_triggers.txt b/common/scripted_triggers/00_pilgrimage_triggers.txt new file mode 100644 index 00000000..77980876 --- /dev/null +++ b/common/scripted_triggers/00_pilgrimage_triggers.txt @@ -0,0 +1,115 @@ + +is_on_a_pilgrimage_trigger = { + exists = involved_activity + involved_activity = { has_activity_type = activity_pilgrimage } + #No more pilgrimage events if you're on your way home :colbert: + exists = capital_province + NOT = { + current_travel_plan = { + next_destination_province = root.capital_province + } + } +} + +is_on_a_hajj_trigger = { + exists = involved_activity + involved_activity = { + has_activity_option = { + category = special_type + option = pilgrimage_type_hajj + } + } + involved_activity.activity_location.barony = title:b_makka + #No more Hajj events if you're on your way home :colbert: + exists = capital_province + NOT = { + current_travel_plan = { + next_destination_province = root.capital_province + } + } +} + +short_pilgrimage_trigger = { + root.involved_activity ?= { + exists = var:pilgrimage_distance + var:pilgrimage_distance = flag:short_pilgrimage_var + } +} + +medium_pilgrimage_trigger = { + root.involved_activity ?= { + exists = var:pilgrimage_distance + var:pilgrimage_distance = flag:medium_pilgrimage_var + } +} + +long_pilgrimage_trigger = { + root.involved_activity ?= { + exists = var:pilgrimage_distance + var:pilgrimage_distance = flag:long_pilgrimage_var + } +} + +very_long_pilgrimage_trigger = { + root.involved_activity ?= { + exists = var:pilgrimage_distance + var:pilgrimage_distance = flag:very_long_pilgrimage_var + } +} + +has_pious_pilgrimage_type_trigger = { + involved_activity ?= { + has_activity_type = activity_pilgrimage + has_activity_option = { + category = special_type + option = pilgrimage_type_pious + } + } +} + +has_worldly_pilgrimage_type_trigger = { + involved_activity ?= { + has_activity_type = activity_pilgrimage + has_activity_option = { + category = special_type + option = pilgrimage_type_worldly + } + } +} + +has_hajj_pilgrimage_type_trigger = { + involved_activity ?= { + has_activity_type = activity_pilgrimage + has_activity_option = { + category = special_type + option = pilgrimage_type_hajj + } + } +} + +#Assumes activity-scope +activity_has_pious_pilgrimage_type_trigger = { + has_activity_type = activity_pilgrimage + has_activity_option = { + category = special_type + option = pilgrimage_type_pious + } +} + +#Assumes activity-scope +activity_has_worldly_pilgrimage_type_trigger = { + has_activity_type = activity_pilgrimage + has_activity_option = { + category = special_type + option = pilgrimage_type_worldly + } +} + +#Assumes activity-scope +activity_has_hajj_pilgrimage_type_trigger = { + has_activity_type = activity_pilgrimage + has_activity_option = { + category = special_type + option = pilgrimage_type_hajj + } +} diff --git a/common/scripted_triggers/00_playdate_activity_triggers.txt b/common/scripted_triggers/00_playdate_activity_triggers.txt new file mode 100644 index 00000000..38cbd031 --- /dev/null +++ b/common/scripted_triggers/00_playdate_activity_triggers.txt @@ -0,0 +1,16 @@ + + +playdate_default_participant_trigger = { + is_ai = yes + NOT = { this = root } + is_alive = yes + is_imprisoned = no + is_incapable = no +} + + +playdate_potential_guest_check_trigger = { + NOT = { this = scope:activity.activity_host } + is_available_for_child_activity_trigger = yes + NOT = { is_in_list = potential_guests } +} diff --git a/common/scripted_triggers/00_province_triggers.txt b/common/scripted_triggers/00_province_triggers.txt new file mode 100644 index 00000000..fce5aee1 --- /dev/null +++ b/common/scripted_triggers/00_province_triggers.txt @@ -0,0 +1,3 @@ +has_province_owner = { + exists = province_owner +} diff --git a/common/scripted_triggers/00_relation_triggers.txt b/common/scripted_triggers/00_relation_triggers.txt new file mode 100644 index 00000000..e78a0eff --- /dev/null +++ b/common/scripted_triggers/00_relation_triggers.txt @@ -0,0 +1,1191 @@ + +###TRIGGER LIST + +################################# +# RELATIONSHIP SETTING TRIGGERS # +################################# + +### FRIEND ### +can_set_relation_potential_friend_trigger = { + NOT = { has_relation_potential_friend = $CHARACTER$ } + can_set_relation_friend_trigger = { CHARACTER = $CHARACTER$ } +} + +can_set_relation_friend_trigger = { + NOT = { this = $CHARACTER$ } + NOR = { + has_relation_friend = $CHARACTER$ + has_relation_best_friend = $CHARACTER$ + has_relation_rival = $CHARACTER$ + has_relation_nemesis = $CHARACTER$ + } +} + +can_set_relation_best_friend_trigger = { + NOT = { this = $CHARACTER$ } + NOR = { + has_relation_best_friend = $CHARACTER$ + has_relation_rival = $CHARACTER$ + has_relation_nemesis = $CHARACTER$ + } + num_of_relation_best_friend = 0 + $CHARACTER$ = { num_of_relation_best_friend = 0 } +} + +### LOVER ### +can_set_relation_potential_lover_trigger = { + NOT = { has_relation_potential_lover = $CHARACTER$ } + can_set_relation_lover_trigger = { CHARACTER = $CHARACTER$ } +} + +can_set_relation_lover_trigger = { + is_adult = yes + NOT = { this = $CHARACTER$ } + is_attracted_to_gender_of = $CHARACTER$ + $CHARACTER$ = { + is_adult = yes + is_attracted_to_gender_of = prev + } + NOT = { has_relation_lover = $CHARACTER$ } +} + +can_set_relation_soulmate_trigger = { + is_adult = yes + NOT = { this = $CHARACTER$ } + is_attracted_to_gender_of = $CHARACTER$ + $CHARACTER$ = { + is_adult = yes + is_attracted_to_gender_of = prev + } + NOR = { + has_relation_rival = $CHARACTER$ + has_relation_nemesis = $CHARACTER$ + } + num_of_relation_soulmate = 0 + $CHARACTER$ = { num_of_relation_soulmate = 0 } +} + +### RIVAL ### +can_set_relation_potential_rival_trigger = { + can_set_relation_rival_if_adult_trigger = { CHARACTER = $CHARACTER$ } + NOT = { has_relation_potential_rival = $CHARACTER$ } +} + +can_set_relation_rival_if_adult_trigger = { + NOT = { this = $CHARACTER$ } + NOR = { + has_relation_friend = $CHARACTER$ + has_relation_best_friend = $CHARACTER$ + has_relation_rival = $CHARACTER$ + has_relation_nemesis = $CHARACTER$ + } +} + +can_set_relation_rival_trigger = { + is_adult = yes + $CHARACTER$ = { is_adult = yes } + can_set_relation_rival_if_adult_trigger = { CHARACTER = $CHARACTER$ } +} + +can_set_relation_nemesis_trigger = { + is_adult = yes + NOT = { this = $CHARACTER$ } + $CHARACTER$ = { is_adult = yes } + NOR = { + has_relation_friend = $CHARACTER$ + has_relation_best_friend = $CHARACTER$ + } + num_of_relation_nemesis = 0 + $CHARACTER$ = { num_of_relation_nemesis = 0 } +} + +can_set_relation_bully_trigger = { + is_adult = no + NOT = { this = $CHARACTER$ } + $CHARACTER$ = { is_adult = no } + NOR = { + has_relation_friend = $CHARACTER$ + has_relation_best_friend = $CHARACTER$ + has_relation_bully = $CHARACTER$ + has_relation_victim = $CHARACTER$ + } +} + +can_set_relation_victim_trigger = { + is_adult = no + NOT = { this = $CHARACTER$ } + $CHARACTER$ = { is_adult = no } + NOR = { + has_relation_friend = $CHARACTER$ + has_relation_best_friend = $CHARACTER$ + has_relation_bully = $CHARACTER$ + has_relation_victim = $CHARACTER$ + } +} + +can_set_relation_rival_even_if_teen_trigger = { + OR = { + is_adult = yes + child_is_teen_trigger = yes + } + $CHARACTER$ = { + OR = { + is_adult = yes + child_is_teen_trigger = yes + } + } + can_set_relation_rival_if_adult_trigger = { CHARACTER = $CHARACTER$ } +} + +can_set_relation_nemesis_even_if_teen_trigger = { + OR = { + is_adult = yes + child_is_teen_trigger = yes + } + $CHARACTER$ = { + OR = { + is_adult = yes + child_is_teen_trigger = yes + } + } + NOT = { this = $CHARACTER$ } + NOR = { + has_relation_friend = $CHARACTER$ + has_relation_best_friend = $CHARACTER$ + } + num_of_relation_nemesis = 0 + $CHARACTER$ = { num_of_relation_nemesis = 0 } +} + +### GRUDGE +can_set_relation_grudge_trigger = { + can_set_relation_grudge_if_adult_trigger = { CHARACTER = $CHARACTER$ } + NOT = { has_relation_grudge = $CHARACTER$ } +} + +can_set_relation_grudge_if_adult_trigger = { + NOT = { this = $CHARACTER$ } + NOR = { + has_relation_friend = $CHARACTER$ + has_relation_best_friend = $CHARACTER$ + has_relation_rival = $CHARACTER$ + has_relation_nemesis = $CHARACTER$ + } +} + +### BLOOD BROTHER +can_set_relation_blood_brother_trigger = { + NOT = { this = $CHARACTER$ } + NOR = { + has_relation_blood_brother = $CHARACTER$ + has_relation_rival = $CHARACTER$ + has_relation_nemesis = $CHARACTER$ + } + num_of_relation_blood_brother = 0 + $CHARACTER$ = { num_of_relation_blood_brother = 0 } +} + +has_blood_brother = { + num_of_relation_blood_brother >= 1 +} + +#################### +# RELATION UPGRADE # +#################### + +# These are not hard blockers for upgrading relations, but are used in relation_upgrade events + +### FRIEND +upgrade_ready_potential_friend_to_friend_trigger = { + can_set_relation_friend_trigger = { CHARACTER = $CHARACTER$ } +} + + +### BEST FRIEND +upgrade_ready_friend_to_best_friend_trigger = { + can_set_relation_best_friend_trigger = { CHARACTER = $CHARACTER$ } +} + + +### LOVER +upgrade_ready_potential_lover_to_lover_support_trigger = { + OR = { + is_ai = no #Players chose if they are ready + trigger_if = { + limit = { has_trait = chaste } + opinion = { + target = $CHARACTER$ + value >= high_positive_opinion + } + } + trigger_else_if = { + limit = { + OR = { + has_trait = lustful + has_trait = seducer + $CHARACTER$.attraction >= medium_positive_attraction + } + } + opinion = { + target = $CHARACTER$ + value >= 0 + } + } + trigger_else = { + opinion = { + target = $CHARACTER$ + value >= low_positive_opinion + } + } + } +} + +upgrade_ready_potential_lover_to_lover_trigger = { + can_set_relation_lover_trigger = { CHARACTER = $CHARACTER$ } + upgrade_ready_potential_lover_to_lover_support_trigger = { CHARACTER = $CHARACTER$ } + save_temporary_scope_as = potential_lover_root + $CHARACTER$ = { upgrade_ready_potential_lover_to_lover_support_trigger = { CHARACTER = scope:potential_lover_root } } +} + +### SOULMATE +upgrade_ready_lover_to_soulmate_trigger = { + can_set_relation_soulmate_trigger = { CHARACTER = $CHARACTER$ } +} + + +### RIVAL +upgrade_ready_potential_rival_to_rival_trigger = { + can_set_relation_rival_trigger = { CHARACTER = $CHARACTER$ } +} + +### NEMESIS +upgrade_ready_rival_to_nemesis_trigger = { + can_set_relation_nemesis_trigger = { CHARACTER = $CHARACTER$ } +} + + + + + +######################## +# AI RELATIONSHIP CAPS # +######################## + +# Soft caps, mostly for schemes + +is_below_ai_friend_soft_cap_trigger = { + trigger_if = { + limit = { is_ai = yes } + + trigger_if = { + limit = { + OR = { + highest_held_title_tier >= tier_kingdom + has_trait = gregarious + } + } + num_of_relation_friend < 3 + } + trigger_else = { + num_of_relation_friend < 1 + } + } + trigger_else = { + always = yes + } +} + +is_below_ai_lover_soft_cap_trigger = { + trigger_if = { + limit = { is_ai = yes } + + trigger_if = { + limit = { + has_trait = lustful + has_trait = seducer + has_focus = intrigue_temptation_focus + } + num_of_relation_lover < 3 + } + trigger_else = { + num_of_relation_lover < 1 + } + } + trigger_else = { + always = yes + } +} + + +############################### +# Character priority triggers # +############################### + +has_important_relationship_with_character_trigger = { + OR = { + has_relation_lover = $CHARACTER$ + has_relation_rival = $CHARACTER$ + has_relation_friend = $CHARACTER$ + } +} + +has_friendly_relationship_with_character_trigger = { + OR = { + has_relation_lover = $CHARACTER$ + has_relation_friend = $CHARACTER$ + } +} + +has_any_mild_good_relationship_with_character_trigger = { + OR = { + has_relation_potential_lover = $CHARACTER$ + has_relation_crush = $CHARACTER$ + has_relation_potential_friend = $CHARACTER$ + has_relation_guardian = $CHARACTER$ + has_relation_ward = $CHARACTER$ + } +} + +has_any_moderate_good_relationship_with_character_trigger = { + OR = { + has_relation_lover = $CHARACTER$ + has_relation_friend = $CHARACTER$ + } +} + +has_any_only_moderate_good_relationship_with_character_trigger = { + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = $CHARACTER$ } + # Exclude the max-tier positive relationships if we're being this specific. + NOT = { + has_any_best_good_relationship_with_character_trigger = { CHARACTER = $CHARACTER$ } + } +} + +has_any_fertility_relationship_with_character_trigger = { + OR = { + has_relation_wedding_very_bad_fertility = $CHARACTER$ + has_relation_wedding_bad_fertility = $CHARACTER$ + has_relation_wedding_good_fertility = $CHARACTER$ + has_relation_wedding_very_good_fertility = $CHARACTER$ + } +} + +has_any_fertility_relationship_with_root_trigger = { + has_any_fertility_relationship_with_character_trigger = { CHARACTER = root } +} + +has_any_best_good_relationship_with_character_trigger = { + OR = { + has_relation_best_friend = $CHARACTER$ + has_relation_soulmate = $CHARACTER$ + } +} + +likes_character_trigger = { + OR = { + opinion = { + target = $CHARACTER$ + value >= 25 + } + has_relation_lover = $CHARACTER$ + has_relation_friend = $CHARACTER$ + has_relation_crush = $CHARACTER$ + AND = { + OR = { + has_relation_potential_friend = $CHARACTER$ + has_relation_guardian = $CHARACTER$ + } + opinion = { + target = $CHARACTER$ + value >= 0 + } + } + AND = { + has_trait = loyal + OR = { + liege ?= $CHARACTER$ + is_consort_of = $CHARACTER$ + is_close_or_extended_family_of = $CHARACTER$ + } + } + } + NOR = { + has_relation_victim = $CHARACTER$ + has_relation_bully = $CHARACTER$ + has_relation_rival = $CHARACTER$ + is_at_war_with = $CHARACTER$ + is_imprisoned_by = $CHARACTER$ + } +} + +has_any_good_relationship_with_character_trigger = { + OR = { + has_any_mild_good_relationship_with_character_trigger = { CHARACTER = $CHARACTER$ } + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = $CHARACTER$ } + } +} + +has_any_mild_bad_relationship_with_character_trigger = { + OR = { + has_relation_potential_rival = $CHARACTER$ + has_relation_victim = $CHARACTER$ + has_relation_bully = $CHARACTER$ + } +} + +has_any_moderate_bad_relationship_with_character_trigger = { + has_relation_rival = $CHARACTER$ +} + +has_any_only_moderate_bad_relationship_with_character_trigger = { + has_relation_rival = $CHARACTER$ + NOT = { + has_any_worst_bad_relationship_with_character_trigger = { CHARACTER = $CHARACTER$ } + } +} + +has_any_worst_bad_relationship_with_character_trigger = { + has_relation_nemesis = $CHARACTER$ +} + +has_any_bad_relationship_with_character_trigger = { + OR = { + has_any_mild_bad_relationship_with_character_trigger = { CHARACTER = $CHARACTER$ } + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = $CHARACTER$ } + } +} + +has_important_relationship_with_root_trigger = { + has_important_relationship_with_character_trigger = { CHARACTER = root } +} + +has_friendly_relationship_with_root_trigger = { + has_friendly_relationship_with_character_trigger = { CHARACTER = root } +} + +has_any_good_relationship_with_root_trigger = { + has_any_good_relationship_with_character_trigger = { CHARACTER = root } +} + +has_any_bad_relationship_with_root_trigger = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } +} + +lover_is_secret_trigger = { + any_secret = { + secret_type = secret_lover + secret_target = $CHARACTER$ + } +} + + + +############################################### +# Triggers that take an argument and NOT root +############################################## + +# List of all localizable relations (e.g, My vassal Alex, My courtier Lisa, My liege Frank, My cousin Teddy, etc.) +has_any_relation_trigger = { + NOT = { this = $CHARACTER$ } + OR = { + # They are our liege + AND = { + exists = $CHARACTER$.liege + this = $CHARACTER$.liege + } + # We are their liege + is_vassal_of = $CHARACTER$ + is_courtier_of = $CHARACTER$ + is_councillor_of = $CHARACTER$ + + # They are our heir/spouse/familyetc. + is_heir_of = $CHARACTER$ + is_consort_of = $CHARACTER$ + is_close_or_extended_family_of = $CHARACTER$ + + #They are the head of our faith + AND = { + exists = $CHARACTER$.faith.religious_head + this = $CHARACTER$.faith.religious_head + } + + # Other relations + has_relation_lover = $CHARACTER$ + has_relation_rival = $CHARACTER$ + has_relation_friend = $CHARACTER$ + has_relation_guardian = $CHARACTER$ + has_relation_ward = $CHARACTER$ + + AND = { + has_employed_any_court_position = yes + any_court_position_holder = { + this = $CHARACTER$ + } + } + } +} + +is_of_major_interest_trigger = { + NOT = { this = $CHARACTER$ } + OR = { + is_heir_of = $CHARACTER$ + is_diarch_of_target = $CHARACTER$ + AND = { + exists = $CHARACTER$.liege + this = $CHARACTER$.liege + } + is_consort_of = $CHARACTER$ + is_councillor_of = $CHARACTER$ + + #They are the head of our faith + AND = { + exists = $CHARACTER$.faith.religious_head + this = $CHARACTER$.faith.religious_head + } + + trigger_if = { + limit = { + exists = liege + exists = $CHARACTER$.liege + } + is_powerful_vassal = yes + liege = $CHARACTER$.liege + } + trigger_if = { + limit = { + is_independent_ruler = yes + } + any_neighboring_top_liege_realm_owner = { + this = $CHARACTER$ + } + } + #House Head + trigger_if = { + limit = { + exists = $CHARACTER$.house.house_head + } + this = $CHARACTER$.house.house_head + } + is_child_of = $CHARACTER$ + # Activity Intents + trigger_if = { + limit = { + exists = involved_activity + exists = intent_target + } + intent_target = $CHARACTER$ + } + } +} + +is_of_minor_interest_trigger = { + NOT = { this = $CHARACTER$ } + OR = { + betrothed ?= $CHARACTER$ + has_relation_lover = $CHARACTER$ + has_relation_rival = $CHARACTER$ + has_relation_friend = $CHARACTER$ + has_relation_guardian = $CHARACTER$ + has_relation_ward = $CHARACTER$ + AND = { + $CHARACTER$ = { target_is_liege_or_above = prev } + NOT = { this = $CHARACTER$.liege } + } + is_close_or_extended_family_of = $CHARACTER$ + } +} + +is_of_major_or_minor_interest_trigger = { + OR = { + is_of_major_interest_trigger = { CHARACTER = $CHARACTER$ } + is_of_minor_interest_trigger = { CHARACTER = $CHARACTER$ } + } +} +has_important_relationship_trigger = { + OR = { + has_relation_lover = $CHARACTER$ + has_relation_rival = $CHARACTER$ + has_relation_friend = $CHARACTER$ + } +} + +has_friendly_relationship_trigger = { + OR = { + has_relation_lover = $CHARACTER$ + has_relation_friend = $CHARACTER$ + } +} + +has_no_real_status_trigger = { + OR = { + is_lowborn = yes + AND = { + exists = dynasty + dynasty = { + any_dynasty_member = { + count <= 2 + } + } + } + highest_held_title_tier <= tier_barony + } + NOR = { + any_close_or_extended_family_member = { + highest_held_title_tier > tier_barony + } + dynasty.dynasty_prestige_level >= 2 + } + is_clergy = no + is_theocratic_lessee = no + is_claimant = no +} + +has_no_particular_noble_roots_trigger = { + custom_tooltip = { + text = has_no_particular_noble_roots_trigger + OR = { + is_lowborn = yes + AND = { + exists = dynasty + dynasty = { + any_dynasty_member = { + count <= 2 + } + } + } + highest_held_title_tier <= tier_barony + government_has_flag = government_is_herder + } + NOR = { + AND = { + highest_held_title_tier > tier_barony + NOT = { government_has_flag = government_is_herder } + } + any_close_or_extended_family_member = { + highest_held_title_tier > tier_barony + NOT = { government_has_flag = government_is_herder } + } + AND = { + exists = dynasty + dynasty.dynasty_prestige_level >= 2 + } + } + } +} + + + +################################### +# Root argument versions +################################### + +is_of_major_interest_to_root_trigger = { + is_of_major_interest_trigger = { + CHARACTER = root + } +} + +is_of_minor_interest_to_root_trigger = { + is_of_minor_interest_trigger = { + CHARACTER = root + } +} + + +############### +# Character Lists +############### + +#Support trigger +major_interest_player_heir_trigger = { + exists = player_heir + NOT = { player_heir = { is_in_list = $LISTNAME$ } } +} + +#Support trigger +major_interest_liege_trigger = { + exists = liege + NOR = { + this = this.liege + liege = { is_in_list = $LISTNAME$ } + } +} + +#Support trigger +major_interest_realm_priest_trigger = { + faith = { has_doctrine = doctrine_theocracy_temporal } + exists = cp:councillor_court_chaplain + NOT = { + cp:councillor_court_chaplain = { is_in_list = $LISTNAME$ } + } +} + +#Support trigger +major_interest_primary_spouse_trigger = { + exists = primary_spouse + NOT = { primary_spouse = { is_in_list = $LISTNAME$ } } +} + + +#Support trigger +major_interest_potential_heirs_trigger = { + player_heir_position = { + target = $CHARACTER$ + value <= 5 + } + NOT = { is_in_list = $LISTNAME$ } +} + +#Makes a list of every character of major interest + #Parameters: + # CHARACTER - the character who the list will be for + # LISTNAME - the name of the list +get_characters_of_major_interest_trigger = { + save_temporary_scope_as = major_root + # 1 - Player heir + trigger_if = { + limit = { + major_interest_player_heir_trigger = { LISTNAME = $LISTNAME$ } + } + player_heir = { add_to_temporary_list = $LISTNAME$ } + } + # 2 - Liege + trigger_if = { + limit = { + major_interest_liege_trigger = { LISTNAME = $LISTNAME$ } + } + liege = { add_to_temporary_list = $LISTNAME$ } + } + # 3 - Realm Priest + trigger_if = { + limit = { + major_interest_realm_priest_trigger = { LISTNAME = $LISTNAME$ } + } + cp:councillor_court_chaplain = { add_to_temporary_list = $LISTNAME$ } + } + # 4 - Primary Spouse + trigger_if = { + limit = { + major_interest_primary_spouse_trigger = { LISTNAME = $LISTNAME$ } + } + primary_spouse = { add_to_temporary_list = $LISTNAME$ } + } + # 5 - Spymaster & # 11 - Other councillors + any_normal_councillor = { + NOT = { is_in_list = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + # 6 - Powerful vassals + any_powerful_vassal = { + NOT = { is_in_list = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + # 7 - Religious head (Excluded because they're highly context-specific) + # 8 - Potential heirs (Player only) + trigger_if = { + limit = { is_ai = no } + trigger_if = { + limit = { exists = dynasty } + dynasty = { + any_dynasty_member = { + major_interest_potential_heirs_trigger = { LISTNAME = $LISTNAME$ CHARACTER = scope:major_root } + count = all + add_to_temporary_list = $LISTNAME$ + } + } + } + # 9 - Allies (Player only, Enemies are only relevant for content about wars) + any_ally = { + NOT = { is_in_list = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + } + # 10 - Neighboring rulers (not included in this list, hard to gauge relevance) +} + +#Support trigger +minor_interest_concubines_secondary_spouses_trigger = { + trigger_if = { + limit = { exists = $CHARACTER$.primary_spouse } + NOT = { this = $CHARACTER$.primary_spouse } + } + NOT = { is_in_list = $LISTNAME$ } +} + +#Support trigger +minor_interest_high_tier_vassal_trigger = { + is_powerful_vassal = no #Already included in major +# highest_held_title_tier >= { +# value = liege.highest_held_title_tier +# subtract = 2 +# min = 2 #Must be at least a count +# } + NOT = { is_in_list = $LISTNAME$ } +} + +minor_interest_close_relatives_trigger = { + NOR = { + #Blocking the most common overlap with high prio + AND = { + is_cousin_of = $CHARACTER$ + NOT = { is_close_family_of = $CHARACTER$ } #Because... incest. Sigh. + } + major_interest_potential_heirs_trigger = { CHARACTER = $CHARACTER$ LISTNAME = $LISTNAME$ } + trigger_if = { + limit = { exists = $CHARACTER$.player_heir } + this = $CHARACTER$.player_heir + } + is_in_list = $LISTNAME$ + } +} + +#Support trigger +minor_interest_betrothed_trigger = { + exists = betrothed + betrothed = { NOT = { is_in_list = $LISTNAME$ } } +} + +#Support trigger +minor_interest_skilled_courtiers_trigger = { + OR = { + diplomacy > high_skill_rating + martial > high_skill_rating + stewardship > high_skill_rating + intrigue > high_skill_rating + learning > high_skill_rating + prowess > high_skill_rating + } + average_skill_rating >= average_of_all_skills_and_prowess + NOT = { is_in_list = $LISTNAME$ } +} + +#Support trigger +minor_interest_liege_or_above_trigger = { + NOR = { + this = $CHARACTER$.liege + is_in_list = $LISTNAME$ + } +} + +#Makes a list of every character of minor interest + #Parameters: + # LISTNAME - the name of the list +get_characters_of_minor_interest_trigger = { + save_temporary_scope_as = minor_root + # 1 - Concubines & secondary spouses + any_consort = { + minor_interest_concubines_secondary_spouses_trigger = { CHARACTER = scope:minor_root LISTNAME = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + # 2 - Direct vassals of high tier + any_vassal = { + minor_interest_high_tier_vassal_trigger = { LISTNAME = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + # 3 - Betrothed + trigger_if = { + limit = { minor_interest_betrothed_trigger = { LISTNAME = $LISTNAME$ } } + betrothed = { add_to_temporary_list = $LISTNAME$ } + } + # 4 - Lovers + any_relation = { + type = lover + NOT = { is_in_list = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + # 5 - Rivals (excluded as they're typically only used in specific contexts) + # 6 - Close relatives + any_close_or_extended_family_member = { + minor_interest_close_relatives_trigger = { CHARACTER = scope:minor_root LISTNAME = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + trigger_if = { #Below is just for players + limit = { is_ai = no } + # 7 - Guardian + any_relation = { + type = guardian + NOT = { is_in_list = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + # 8 - Ward + any_relation = { + type = ward + NOT = { is_in_list = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + # 9 - Friends + any_relation = { + type = friend + NOT = { is_in_list = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + # 10 - Knights + any_knight = { + NOT = { is_in_list = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + # 11 - Highly skilled courtiers (players only) + trigger_if = { + limit = { is_ai = no } + any_courtier = { + minor_interest_skilled_courtiers_trigger = { LISTNAME = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + } + any_liege_or_above = { + minor_interest_liege_or_above_trigger = { CHARACTER = scope:minor_root LISTNAME = $LISTNAME$ } + count = all + add_to_temporary_list = $LISTNAME$ + } + } +} + + + +#Makes a list of all characters of interest + #Parameters: + # CHARACTER - the character the list is for + # LISTNAME - the name of the list +get_characters_of_interest_trigger = { + get_characters_of_major_interest_trigger = { + LISTNAME = $LISTNAME$ + } + get_characters_of_minor_interest_trigger = { + LISTNAME = $LISTNAME$ + } +} + + + +################ +# Potential Enemies +################ + +#Makes a list of characters who are classified as potential enemies + #Parameters + # CHARACTER - The character whose enemies are being found + # LISTNAME - The name of the list +get_potential_enemies_effect = { + $CHARACTER$ = { + trigger_if = { + limit = { + any_vassal = { + always = yes + } + } + any_vassal = { + count = all + add_to_temporary_list = temp_$LISTNAME$ + } + } + trigger_if = { + limit = { + any_relation = { + type = rival + always = yes + } + } + any_relation = { + type = rival + count = all + add_to_temporary_list = temp_$LISTNAME$ + } + } + trigger_if = { + limit = { + is_independent_ruler = no + } + liege = { + add_to_temporary_list = temp_$LISTNAME$ + } + } + trigger_if = { + limit = { + is_independent_ruler = yes + any_neighboring_top_liege_realm_owner = { + always = yes + } + } + any_neighboring_top_liege_realm_owner = { + count = all + add_to_temporary_list = temp_$LISTNAME$ + } + } + #Potential Heirs that do not like you + #A Religious Head that dislikes you and you are powerful enough + + any_in_list = { + count = all + trigger_if = { + limit = { + NOT = { is_in_list = $LISTNAME$ } + OR = { + #Vassal enemies + AND = { + is_vassal_of = $CHARACTER$ + is_powerful = yes + opinion = { + target = $CHARACTER$ + value <= 0 + } + } + #Rivals + has_relation_rival = $CHARACTER$ + #Lieges + AND = { + $CHARACTER$ = { is_independent_ruler = no } + this = $CHARACTER$.liege + opinion = { + target = $CHARACTER$ + value <= 0 + } + } + #Neighboring independent rulers + AND = { + any_neighboring_top_liege_realm_owner = { + this = $CHARACTER$ + } + NOT = { is_allied_to = $CHARACTER$ } + OR = { + opinion = { + target = $CHARACTER$ + value <= 20 + } + AND = { + opinion = { + target = $CHARACTER$ + value <= 50 + } + has_any_cb_on = $CHARACTER$ + } + } + } + } + } + add_to_temporary_list = $LISTNAME$ + } + } + } +} + +has_RelationToMe_relation = { + save_temporary_scope_as = relation_check + NOT = { this = $CHARACTER$ } # Don't print our relation to ourselves! + OR = { + is_close_or_extended_family_of = $CHARACTER$ + any_spouse = { + even_if_dead = yes + this = $CHARACTER$ + } + any_spouse = { + even_if_dead = yes + this = $CHARACTER$ + is_concubine = yes + } + $CHARACTER$ = { + exists = player_heir + player_heir = scope:relation_check + } + is_heir_of = $CHARACTER$ + has_relation_rival = $CHARACTER$ + has_relation_lover = $CHARACTER$ + has_relation_friend = $CHARACTER$ + has_relation_bully = $CHARACTER$ + has_relation_victim = $CHARACTER$ + is_councillor_of = $CHARACTER$ + any_spouse = { any_child = { this = $CHARACTER$ } } + any_parent = { any_spouse = { this = $CHARACTER$ } } + any_parent = { any_spouse = { any_child = { this = $CHARACTER$ } } } + AND = { + exists = liege + liege = $CHARACTER$ + } + any_courtier = { this = $CHARACTER$ } + any_vassal_or_below = { this = $CHARACTER$ } + AND = { + is_independent_ruler = no + $CHARACTER$ = { is_independent_ruler = no } + liege = $CHARACTER$.liege + } + has_relation_crush = $CHARACTER$ + has_relation_ward = $CHARACTER$ + has_relation_guardian = $CHARACTER$ + has_relation_mentor = $CHARACTER$ + has_relation_student = $CHARACTER$ + AND = { + has_employed_any_court_position = yes + any_court_position_holder = { + this = $CHARACTER$ + } + } + $CHARACTER$ = { is_sibling_in_law_of_root_trigger = yes } + AND = { + exists = dynasty + $CHARACTER$ = { exists = dynasty } + dynasty = $CHARACTER$.dynasty + } + $CHARACTER$ = { + any_owned_story = { + story_type = story_peasant_affair + var:peasant_character = { + this = root + } + } + } + $CHARACTER$ = { + is_courtier_of = scope:relation_check + OR = { + AND = { + exists = inspiration + inspiration = { + inspiration_sponsor = { this = scope:relation_check } + } + } + AND = { + exists = var:created_artifact_for + var:created_artifact_for = scope:relation_check + } + } + } + $CHARACTER$ = { + any_scheme = { + scheme_is_character_agent = root + } + } + is_imprisoned_by = $CHARACTER$ + $CHARACTER$ = { is_imprisoned_by = scope:relation_check } + AND = { + exists = host + host = $CHARACTER$ + } + $CHARACTER$ = { + exists = host + host = scope:relation_check + } + is_knight_of = $CHARACTER$ + AND = { + is_female = yes + any_spouse = { + is_child_of = root + } + } + AND = { + is_male = yes + any_spouse = { + is_child_of = root + } + } + } +} diff --git a/common/scripted_triggers/00_religious_triggers.txt b/common/scripted_triggers/00_religious_triggers.txt index 360242ff..504498ec 100644 --- a/common/scripted_triggers/00_religious_triggers.txt +++ b/common/scripted_triggers/00_religious_triggers.txt @@ -175,7 +175,10 @@ can_be_combatant_based_on_gender_trigger = { has_trait = shieldmaiden } # Event-based special exceptions - has_character_modifier = ignores_gender_army_rules + OR = { + has_character_modifier = ignores_gender_army_rules + has_character_modifier = mpo_destined_leader_modifier + } AND = { $ARMY_OWNER$ = { culture = { has_cultural_parameter = high_prowess_ignores_knight_restrictions } } NOT = { $ARMY_OWNER$ = { culture = { has_cultural_parameter = minimum_prowess_for_knights } } } @@ -1255,6 +1258,12 @@ valid_demand_conversion_conditions_trigger = { } } } + scope:actor = { + NAND = { + has_trait = nomadic_philosophy + has_trait = zealous + } + } custom_description = { text = "is_head_of_religion" @@ -1376,6 +1385,25 @@ is_reincarnation_trigger = { # Used in faith scope, COUNT is number of faiths to at least have and CHARACTER is who must own them num_realm_holy_sites_faithful_holders = { + $CHARACTER$ = { save_temporary_scope_as = root_scope } + trigger_if = { + limit = { + exists = $CHARACTER$.confederation + } + custom_description = { + text = direct_realm_holy_sites_held_by_faithful_confederation + subject = $CHARACTER$ + object = this + value = 1 + any_holy_site = { + county = { + save_temporary_scope_as = current_holy_site + is_holy_site_controlled_by = $CHARACTER$ + holder.faith = $CHARACTER$.faith + } + } + } + } custom_description = { text = number_realm_holy_sites_held_by_faithful subject = $CHARACTER$ @@ -1384,7 +1412,17 @@ num_realm_holy_sites_faithful_holders = { any_holy_site = { count >= $COUNT$ county = { - is_holy_site_controlled_by = $CHARACTER$ + save_temporary_scope_as = current_holy_site + OR = { + is_holy_site_controlled_by = $CHARACTER$ + $CHARACTER$.confederation ?= { + any_confederation_member = { + scope:current_holy_site = { + is_holy_site_controlled_by = prev + } + } + } + } holder.faith = $CHARACTER$.faith } } @@ -1410,15 +1448,19 @@ can_create_temporal_head_of_faith_title_trigger = { } can_create_spiritual_head_of_faith_title_trigger = { - num_realm_holy_sites_faithful_holders = { - COUNT = holy_sites_to_create_spiritual_head_of_faith - CHARACTER = ROOT - } - root = { piety_level >= medium_piety_level } - trigger_if = { - limit = { has_doctrine = special_doctrine_not_allowed_to_hof } - NOT = { has_doctrine = special_doctrine_not_allowed_to_hof } - } + num_realm_holy_sites_faithful_holders = { + COUNT = holy_sites_to_create_spiritual_head_of_faith + CHARACTER = ROOT + } + root = { piety_level >= medium_piety_level } + trigger_if = { + limit = { has_doctrine = special_doctrine_not_allowed_to_hof } + NOT = { has_doctrine = special_doctrine_not_allowed_to_hof } + } + NAND = { + exists = religious_head + has_doctrine_parameter = maintains_head_of_faith_on_creation + } } # this = Person trying to create the title @@ -1705,6 +1747,7 @@ has_tolerant_faith_or_culture_trigger = { OR = { faith = { has_doctrine = doctrine_pluralism_pluralistic } culture = { has_cultural_parameter = less_likely_to_force_conversion } + has_trait = nomadic_philosophy } } @@ -1829,8 +1872,21 @@ has_holy_building = { has_building_or_higher = holy_site_great_mosque_of_djenne_01 has_building_or_higher = holy_site_great_mosque_of_samarra_01 has_building_or_higher = holy_site_prophetic_mosque_01 + has_building_or_higher = brihadeeswarar_temple_01 + has_building_or_higher = shwedagon_pagoda_01 + has_building_or_higher = ananda_temple_01 + has_building_or_higher = the_friday_mosque_01 has_building_or_higher = dome_of_the_rock_01 has_building_or_higher = temple_in_jerusalem_01 + has_building_or_higher = cluny_abbey_01 + has_building_or_higher = damascus_mosque_01 + has_building_or_higher = jokhang_01 + has_building_or_higher = beta_giyorgis_01 + has_building_or_higher = holy_wisdom_01 + has_building_or_higher = duomo_florence_01 + has_building_or_higher = konark_temple_01 + has_building_or_higher = wawel_cathedral_01 + has_building_or_higher = vatapi_caves_01 } } diff --git a/common/scripted_triggers/00_rich_presence_triggers.txt b/common/scripted_triggers/00_rich_presence_triggers.txt new file mode 100644 index 00000000..b9313cc0 --- /dev/null +++ b/common/scripted_triggers/00_rich_presence_triggers.txt @@ -0,0 +1,18 @@ +is_murder_activity_trigger = { + OR = { + AND = { + has_activity_type = activity_wedding + has_activity_option = { + category = special_type + option = wedding_type_bloody + } + } + AND = { + has_activity_type = activity_feast + has_activity_option = { + category = special_type + option = feast_type_murder + } + } + } +} diff --git a/common/scripted_triggers/00_roaming_activity_triggers.txt b/common/scripted_triggers/00_roaming_activity_triggers.txt new file mode 100644 index 00000000..38a12185 --- /dev/null +++ b/common/scripted_triggers/00_roaming_activity_triggers.txt @@ -0,0 +1,88 @@ +roaming_activity_intro_base_trigger = { + terrain = $TERRAIN$ + roaming_activity_winter_trigger = no + roaming_activity_monsoon_trigger = no +} + +roaming_activity_intro_base_two_trigger = { + OR = { + terrain = $TERRAIN$ + terrain = $TERRAIN_2$ + } + roaming_activity_winter_trigger = no + roaming_activity_monsoon_trigger = no +} + +roaming_activity_intro_base_three_trigger = { + OR = { + terrain = $TERRAIN$ + terrain = $TERRAIN_2$ + terrain = $TERRAIN_3$ + } + roaming_activity_winter_trigger = no + roaming_activity_monsoon_trigger = no +} + +roaming_activity_intro_winter_trigger = { + terrain = $TERRAIN$ + roaming_activity_winter_trigger = yes +} + +roaming_activity_intro_winter_two_trigger = { + OR = { + terrain = $TERRAIN$ + terrain = $TERRAIN_2$ + } + roaming_activity_winter_trigger = yes +} + +roaming_activity_winter_trigger = { + has_winter_trigger = yes + NOR = { + terrain = desert + terrain = desert_mountains + terrain = drylands + terrain = oasis + terrain = floodplains + } +} + +roaming_activity_intro_monsoon_trigger = { + terrain = $TERRAIN$ + roaming_activity_monsoon_trigger = yes +} + +roaming_activity_intro_monsoon_two_trigger = { + OR = { + terrain = $TERRAIN$ + terrain = $TERRAIN_2$ + } + roaming_activity_monsoon_trigger = yes +} + +roaming_activity_monsoon_trigger = { + tropical_seasons_region_trigger = yes + middle_of_year_season_trigger = yes + NOR = { + terrain = taiga + terrain = steppe + } +} + +roaming_activity_special_guest_trigger = { + NOT = { this = scope:host } + court_owner ?= scope:host + is_healthy = yes + is_available = yes + age >= 12 + is_ai = yes + OR = { + is_close_family_of = scope:host + is_spouse_of = scope:host + has_relation_friend = scope:host + has_relation_best_friend = scope:host + has_relation_lover = scope:host + is_knight_of = scope:host + } +} + diff --git a/common/scripted_triggers/00_romance_and_seduction_triggers.txt b/common/scripted_triggers/00_romance_and_seduction_triggers.txt new file mode 100644 index 00000000..25e60ade --- /dev/null +++ b/common/scripted_triggers/00_romance_and_seduction_triggers.txt @@ -0,0 +1,768 @@ + +###TRIGGER LIST + +###SEDUCE SCHEME## +# use_seduce_secrecy_trigger + + +###SEXUAL ORITENTATION### +# attracted_to_same_gender_trigger_trigger +# attracted_to_opposite_gender_trigger_trigger +# attracted_to_all_genders_trigger +# matching_gender_and_sexuality_trigger + +###INCEST### +# accepts_incest_with_trigger +# accepts_incest_with_each_other_trigger +# likely_to_commit_incest_trigger +# likely_to_commit_incest_with_trigger + +###ATTRACTION### +# possibly_interested_in_root_trigger +# possible_mutual_interest_trigger +# object_of_importance_exist_trigger + +### CHEATING #### +# might_cheat_on_partner_trigger - If scope would at all be willing to cheat, baseline that must be passed +# might_cheat_on_every_partner_trigger - checks might_cheat_on_partner_trigger on every partner +# dislikes_partner_cheating_trigger + + +### PREGNANCY & STDs ### +# possible_pregnancy_after_sex_with_character_trigger - requries root and other character + + +###SEDUCE SCHEME TRIGGERS### + +use_seduce_secrecy_trigger = { + #TODO_CD_EP3_ERCC; this is breaking in a confusing way, with the secrecy no longer showing in the scheme start widget. Original version preserved below, not sure why it doesn't work. + $TARGET$ = { + NOR = { + is_consort_of = $OWNER$ + is_courtier_of = $OWNER$ + } + } + #$TARGET$ = { + #NOR = { + #is_consort_of = $OWNER$ + #is_courtier_of = $OWNER$ + #is_ruler = yes + #} + #exists = liege + #OR = { + #is_consort_of = $TARGET$.liege + #is_close_family_of = $TARGET$.liege + #house = $TARGET$.house + #} + #} +} + + +court_allow_owner_opt_out_trigger = { + NAND = { + is_ai = yes + scope:target = { is_ai = no } + } +} + +###SEXUAL ORIENTATION TRIGGERS### +has_sexual_orientation_trigger = { + OR = { + has_sexuality = heterosexual + has_sexuality = bisexual + has_sexuality = homosexual + has_sexuality = asexual + } +} + +attracted_to_same_gender_trigger = { + OR = { + has_sexuality = bisexual + has_sexuality = homosexual + } +} + +attracted_to_opposite_gender_trigger = { + OR = { + has_sexuality = bisexual + has_sexuality = heterosexual + } +} + +attracted_to_all_genders_trigger = { + has_sexuality = bisexual +} + + +#Needs CHARACTER_1 and CHARACTER_2 +matching_gender_and_sexuality_trigger = { + $CHARACTER_1$ = { is_attracted_to_gender_of = $CHARACTER_2$ } + $CHARACTER_2$ = { is_attracted_to_gender_of = $CHARACTER_1$ } +} + + + + + + +###ATTRACTION### + +possibly_interested_in_root_trigger = { + OR = { + AND = { #Is not related to Root, or has an indicator that they would be interested anyways + NOR = { + any_sibling = { + this = root + } + any_parent = { + this = root + } + any_child = { + this = root + } + } + OR = { + has_relation_crush = root + has_relation_lover = root + has_relation_potential_lover = root + AND = { + is_attracted_to_men = yes + root = { is_male = yes } + } + AND = { + is_attracted_to_women = yes + root = { is_female = yes } + } + } + } + AND = { + OR = { + any_sibling = { + this = root + } + any_parent = { + this = root + } + any_child = { + this = root + } + } + OR = { + has_relation_crush = root + has_relation_lover = root + has_relation_potential_lover = root + } + } + } +} + +possibly_interested_in_character_trigger = { + OR = { + AND = { #Is not related to Root, or has an indicator that they would be interested anyways + NOR = { + any_sibling = { + this = $CHARACTER$ + } + any_parent = { + this = $CHARACTER$ + } + any_child = { + this = $CHARACTER$ + } + } + OR = { + has_relation_crush = $CHARACTER$ + has_relation_lover = $CHARACTER$ + has_relation_potential_lover = $CHARACTER$ + AND = { + is_attracted_to_men = yes + $CHARACTER$ = { is_male = yes } + } + AND = { + is_attracted_to_women = yes + $CHARACTER$ = { is_female = yes } + } + } + } + AND = { + OR = { + any_sibling = { + this = $CHARACTER$ + } + any_parent = { + this = $CHARACTER$ + } + any_child = { + this = $CHARACTER$ + } + } + OR = { + has_relation_crush = $CHARACTER$ + has_relation_lover = $CHARACTER$ + has_relation_potential_lover = $CHARACTER$ + } + } + } +} + +possible_mutual_interest_trigger = { + NOT ={ $CHARACTER_1$ = $CHARACTER_2$ } #Cannot be an event target for yourself + $CHARACTER_1$ = { + OR = { #Not related etc. + AND = { + NOT = { + any_sibling = { + this = $CHARACTER_2$ + } + } + NOT = { + any_parent = { + this = $CHARACTER_2$ + } + } + NOT = { + any_child = { + this = $CHARACTER_2$ + } + } + } + has_relation_crush = $CHARACTER_2$ + has_relation_lover = $CHARACTER_2$ + has_opinion_modifier = { + modifier = love_opinion + target = $CHARACTER_2$ + } + } + } + $CHARACTER_2$ = { + OR = { + AND = { #Not related etc. + NOT = { + any_sibling = { + this = $CHARACTER_1$ + } + } + NOT = { + any_parent = { + this = $CHARACTER_1$ + } + } + NOT = { + any_child = { + this = $CHARACTER_1$ + } + } + } + has_relation_crush = $CHARACTER_1$ + has_relation_lover = $CHARACTER_1$ + has_opinion_modifier = { + modifier = love_opinion + target = $CHARACTER_1$ + } + } + } + $CHARACTER_1$ = { + OR = { + AND = { + is_attracted_to_men = yes + $CHARACTER_2$ = { is_male = yes } + } + AND = { + is_attracted_to_women = yes + $CHARACTER_2$ = { is_female = yes } + } + } + } + $CHARACTER_2$ = { + OR = { + AND = { + is_attracted_to_men = yes + $CHARACTER_1$ = { is_male = yes } + } + AND = { + is_attracted_to_women = yes + $CHARACTER_1$ = { is_female = yes } + } + } + } +} + + +#To check if either of two lovers have a object of importance saved + #Use LOVER to slot in the non-scope character! +object_of_importance_exist_trigger = { + save_temporary_scope_as = original_scope + OR = { + AND = { + has_variable_list = lover_object_of_importance + variable_list_size = { + name = lover_object_of_importance + value = 2 + } + is_target_in_variable_list = { + name = lover_object_of_importance + target = $LOVER$ + } + } + AND = { + has_variable_list = lover_object_of_importance_2 + variable_list_size = { + name = lover_object_of_importance_2 + value = 2 + } + is_target_in_variable_list = { + name = lover_object_of_importance_2 + target = $LOVER$ + } + } + $LOVER$ = { + has_variable_list = lover_object_of_importance + variable_list_size = { + name = lover_object_of_importance + value = 2 + } + is_target_in_variable_list = { + name = lover_object_of_importance + target = scope:original_scope + } + } + $LOVER$ = { + has_variable_list = lover_object_of_importance_2 + variable_list_size = { + name = lover_object_of_importance_2 + value = 2 + } + is_target_in_variable_list = { + name = lover_object_of_importance_2 + target = scope:original_scope + } + } + } +} + + +might_cheat_on_partner_trigger = { + NOT = { has_trait = celibate } + is_eunuch_trigger = no + trigger_if = { + limit = { is_ai = no } + # Players always have the option to cheat - we check this here so that we don't constantly need to OR it when using might_cheat_on_every_partner_trigger. + always = yes + } + trigger_if = { + limit = { + $PARTNER$ = { + government_has_flag = government_is_nomadic + } + } + NOT = { + $PARTNER$ = { + domicile ?= { + has_domicile_parameter = nomad_yurt_spouse_will_not_cheat + } + } + } + } + trigger_else_if = { + limit = { + # If $PARTNER$ isn't actually my partner, it's not cheating! + OR = { + has_relation_lover = $PARTNER$ + is_consort_of = $PARTNER$ # Includes both spouses and concubines + } + + # Additionally, in faiths with the Polyamory doctrine, extramarital relationships aren't considered to be cheating on partners. + NOT = { faith = { has_doctrine_parameter = no_unfaithfulness_penalty_active } } + } + + NOT = { has_trait = loyal } # Loyal people never cheat + + # Soulmates never cheat, unless they're Lustful/Seducer and have low Honor + trigger_if = { + limit = { has_relation_soulmate = $PARTNER$ } + ai_honor <= medium_negative_ai_value + calc_true_if = { + amount >= 2 + has_trait = lustful + has_trait = seducer + has_focus = intrigue_temptation_focus + } + } + # Non-soulmates have slightly more complex criteria + trigger_else = { + OR = { + # Having one of these things that makes characters always willing to cheat: + OR = { + has_trait = lustful + has_trait = seducer + has_focus = intrigue_temptation_focus + # Dishonorable and callous enough to not care about current partners (regardless of opinion). + AND = { + ai_compassion <= high_negative_ai_value + ai_honor <= high_negative_ai_value + } + # Needs aren't getting met. + AND = { + is_deviant_trigger = yes + $PARTNER$ = { is_deviant_trigger = no } + } + # Rakish character that's about to have a mental breakdown. + AND = { + has_trait = rakish + stress_level >= 2 + } + } + + # Calc for honour. + ## Characters with really lacking honour might cheat even at decently opinion positive levels. + trigger_if = { + limit = { ai_honor <= high_negative_ai_value } + # Consorts (spouses, concubines). + trigger_if = { + limit = { is_consort_of = $PARTNER$ } + opinion = { + target = $PARTNER$ + value <= medium_positive_opinion + } + } + # Lovers. + trigger_else = { + opinion = { + target = $PARTNER$ + value <= high_positive_opinion + } + } + } + ## Characters with at least some honour require much less happy relationships. + trigger_else_if = { + limit = { ai_honor <= medium_positive_ai_value } + # Consorts (spouses, concubines). + trigger_if = { + limit = { is_consort_of = $PARTNER$ } + # Consorts (spouses, concubines) + opinion = { + target = $PARTNER$ + value <= neutral_opinion + } + } + # Lovers. + trigger_else = { + opinion = { + target = $PARTNER$ + value <= low_positive_opinion # 80 for lovers + } + } + } + ## Finally, characters might also cheat if they just dislike their partner enough, regardless of honor. + trigger_else = { + opinion = { + target = $PARTNER$ + value <= high_negative_opinion + } + } + } + } + } + # Having an extramarital relationship with someone else would not count as cheating on this person. + trigger_else = { always = yes } +} + +might_cheat_on_every_partner_trigger = { + save_temporary_scope_as = potential_cheater + is_eunuch_trigger = no + NOT = { has_trait = celibate } + any_spouse = { + count = all + save_temporary_scope_as = partner2 + scope:potential_cheater = { might_cheat_on_partner_trigger = { PARTNER = scope:partner2 } } + } + any_relation = { + type = lover + count = all + save_temporary_scope_as = partner3 + scope:potential_cheater = { might_cheat_on_partner_trigger = { PARTNER = scope:partner3 } } + } +} + + +dislikes_partner_cheating_trigger = { + trigger_if = { + limit = { + OR = { + has_relation_lover = $PARTNER$ + is_consort_of = $PARTNER$ + } + } + $PARTNER$ = { save_temporary_scope_as = cheating_trigger_partner } + save_temporary_scope_as = cheating_trigger_root + OR = { + AND = { + has_relation_soulmate = $PARTNER$ # Soulmates are exclusive + NOT = { faith = { has_doctrine_parameter = no_unfaithfulness_penalty_active } } + } + AND = { # Feels slighted + is_consort_of = $PARTNER$ + trait_is_shunned_or_criminal_in_faith_trigger = { + TRAIT = adulterer + FAITH = scope:cheating_trigger_root.faith + GENDER_CHARACTER = scope:cheating_trigger_partner + } + OR = { + ai_honor >= 0 + ai_zeal >= 0 + has_trait = arrogant + ai_vengefulness <= 0 + } + } + opinion = { # Loves partner + target = $PARTNER$ + value >= high_positive_opinion + } + } + NAND = { # Sexually liberal characters don't mind, unless you're exclusive + sexually_liberal_trigger = yes + NOT = { has_relation_soulmate = $PARTNER$ } + } + } + trigger_else = { always = no } # Partner isn't my partner, so I don't care +} + +#Would a soulmate expect you to be exclusively with them? +soulmate_relation_is_exclusive_trigger = { + NOT = { faith = { has_doctrine_parameter = no_unfaithfulness_penalty_active } } +} + +sexually_liberal_trigger = { + OR = { + is_deviant_trigger = yes + has_trait = lustful + has_trait = seducer + faith = { trait_is_virtue = lustful } + AND = { + exists = scope:activity + has_activity_intent = lechery_intent + } + } + NOR = { + has_trait = chaste + has_trait = celibate + } +} + +has_lustful_adjacent_trait_trigger = { + OR = { + is_deviant_trigger = yes + has_trait = lustful + has_trait = seducer + has_trait = rakish + faith = { trait_is_virtue = lustful } + AND = { + exists = scope:activity + has_activity_intent = lechery_intent + } + } + NOR = { + has_trait = chaste + has_trait = celibate + } +} + +#Can this character ever have an affair? Counts both inability and whether sex outside marriage is counted as religiously problematic for them. +eligible_for_affairs_trigger = { + NOR = { + has_trait = celibate + #Technically (and, historically, frequently) eunuchs can still have affairs, they just aren't able to impregnate. + OR = { + faith = { has_doctrine_parameter = no_unfaithfulness_penalty_active } + trait_is_shunned_or_criminal_in_faith_trigger = { + TRAIT = adulterer + FAITH = root.faith + GENDER_CHARACTER = root + } + trait_is_shunned_or_criminal_in_faith_trigger = { + TRAIT = fornicator + FAITH = root.faith + GENDER_CHARACTER = root + } + } + } +} + + +freely_accepts_sodomy_with_trigger = { #Will ignore sodomy consequences (because there are none or they have done this before) + OR = { + NOT = { relation_with_character_is_sodomy_in_my_or_lieges_faith_trigger = { CHARACTER = $CHARACTER$ } } + has_trait = deviant + has_trait = sodomite + any_secret = { secret_type = secret_homosexual } + } +} + +# 100% fine with incest with CHARACTER. Important: There are also other factors to attraction! This isn't 100% acceptance of romantic/sexual relationship. +accepts_incest_with_trigger = { + OR = { + NOT = { is_close_or_extended_family_of = $CHARACTER$ } #Actually no incest here! + is_incestuous_trigger = yes + has_relation_potential_lover = $CHARACTER$ + has_relation_lover = $CHARACTER$ + } + save_temporary_scope_as = incest_evaluation + NOT = { #under 20 trigger is a HARD limit + guaranteed_under_20_incest_rejection_trigger = { + TARGET = scope:incest_evaluation + SEDUCER = $CHARACTER$ + } + } +} + +accepts_incest_with_each_other_trigger = { + $CHARACTER_2$ = { + accepts_incest_with_trigger = { + CHARACTER = $CHARACTER_1$ + } + } + $CHARACTER_1$ = { + accepts_incest_with_trigger = { + CHARACTER = $CHARACTER_2$ + } + } +} + +#Is likely to be okay with incest broadly +likely_to_commit_incest_trigger = { + OR = { + AND = { + sexually_liberal_trigger = yes + OR = { + # Doesn't care much about social taboo + has_trait = callous + has_trait = cynical + has_trait = eccentric + # Lack of contact with other members of their attracted sex + has_trait = reclusive + has_trait = shy + # They think they can get away with it + has_trait = deceitful + } + } + # A bit of a weirdo + is_deviant_trigger = yes + # I've incested before, I will incest again! + is_incestuous_trigger = yes + # Trauma + stress_level >= 2 + } + save_temporary_scope_as = incest_evaluation + NOT = { #under 20 trigger is a HARD limit + guaranteed_under_20_incest_rejection_trigger = { + TARGET = scope:incest_evaluation + SEDUCER = $CHARACTER$ + } + } +} + +likely_to_commit_incest_with_trigger = { + OR = { + NOT = { # Not incest + $CHARACTER_1$ = { + relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = $CHARACTER_2$ } + } + } + $CHARACTER_1$ = { + OR = { + AND = { + sexually_liberal_trigger = yes + OR = { + # Doesn't care much about social taboo + has_trait = callous + has_trait = cynical + has_trait = eccentric + # Lack of contact with other members of their attracted sex + has_trait = reclusive + has_trait = shy + # They think they can get away with it + has_trait = deceitful + } + # Only if the other character is also likely to accept in this case + $CHARACTER_2$ = { + sexually_liberal_trigger = yes + OR = { + # Doesn't care much about social taboo + has_trait = callous + has_trait = cynical + has_trait = eccentric + # Lack of contact with other members of their attracted sex + has_trait = reclusive + has_trait = shy + # Deceitful trigger not present here because CHARACTER_1 is assumed to be the instigator, CHARACTER_2 doesn't necessarily actively want this, so getting away with it wouldn't motivate them into doing it + is_incestuous_trigger = yes + is_deviant_trigger = yes + } + } + } + # A bit of a weirdo + is_deviant_trigger = yes + # I've incested before, I will incest again! + is_incestuous_trigger = yes + # Shared trauma + AND = { + any_relation = { + type = rival + has_relation_rival = $CHARACTER_2$ + } + stress_level >= 1 + } + } + save_temporary_scope_as = incest_evaluation + NOT = { #under 20 trigger is a HARD limit + guaranteed_under_20_incest_rejection_trigger = { + TARGET = scope:incest_evaluation + SEDUCER = $CHARACTER_1$ + } + } + } + } +} + +guaranteed_under_20_incest_rejection_trigger = { + $TARGET$ = { + NOT = { is_consort_of = $SEDUCER$ } + is_close_or_extended_family_of = $SEDUCER$ + age < 20 + age < $SEDUCER$.age + is_ai = yes #Players are allowed to choose + } +} + +### PREGNANCY & STDs ### +possible_pregnancy_after_sex_with_character_trigger = { + trigger_if = { + limit = { + is_male = yes + $CHARACTER$ = { is_female = yes } + } + is_visibly_fertile = yes + fertility >= 0.1 + + $CHARACTER$ ={ + is_visibly_fertile = yes + fertility >= 0.1 + is_pregnant = no + } + } + + trigger_if = { + limit = { + is_female = yes + $CHARACTER$ = { is_male = yes } + } + is_visibly_fertile = yes + fertility >= 0.1 + is_pregnant = no + + $CHARACTER$ = { + is_visibly_fertile = yes + fertility >= 0.1 + } + } +} diff --git a/common/scripted_triggers/00_scheme_befriend_triggers.txt b/common/scripted_triggers/00_scheme_befriend_triggers.txt new file mode 100644 index 00000000..d4c09b55 --- /dev/null +++ b/common/scripted_triggers/00_scheme_befriend_triggers.txt @@ -0,0 +1,52 @@ +#Scripted triggers relating to the Befriend Scheme + +##################################################################### +# TRIGGER LIST +##################################################################### +# !!! Remember to add all new triggers with a short description here !!! + +#befriend_target_is_close_to_owner_trigger <-Indicates someone is close to you already + +###################################################################### +# TRIGGERS +###################################################################### + +befriend_target_is_close_to_owner_trigger = { + OR = { + is_close_or_extended_family_of = scope:target + is_consort_of = scope:target + is_employer_of = scope:target + } +} + +befriend_owner_is_close_to_target_trigger = { + OR = { + is_close_or_extended_family_of = scope:owner + is_consort_of = scope:owner + court_owner = scope:owner + } +} + +befriend_scope_is_close_to_target_trigger = { + OR = { + is_close_or_extended_family_of = scope:target + is_consort_of = scope:target + has_relation_friend = scope:target + AND = { + OR = { + court_owner = scope:target + AND = { + exists = liege + liege = scope:target + } + any_vassal = { + this = scope:target + } + } + reverse_opinion = { + target = scope:target + value > 30 + } + } + } +} diff --git a/common/scripted_triggers/00_scheme_triggers.txt b/common/scripted_triggers/00_scheme_triggers.txt new file mode 100644 index 00000000..dad8e2ca --- /dev/null +++ b/common/scripted_triggers/00_scheme_triggers.txt @@ -0,0 +1,931 @@ + +diplomacy_scheme_trigger = { + OR = { + scheme_type = befriend + scheme_type = sway + scheme_type = courting + } +} + +intrigue_scheme_trigger = { + OR = { + scheme_type = murder + scheme_type = abduct + scheme_type = fabricate_hook + scheme_type = steal_back_artifact + } +} + +# Should be synced with the schemes listed in can_start_hostile_scheme_against_trigger. +hostile_scheme_trigger = { + OR = { + scheme_type = murder + scheme_type = abduct + scheme_type = claim_throne + scheme_type = fabricate_hook + scheme_type = steal_back_artifact + } +} + +friendly_scheme_trigger = { + OR = { + scheme_type = seduce + scheme_type = befriend + scheme_type = sway + scheme_type = courting + } +} + +# Should be synced with the schemes listed in hostile_scheme_trigger. +can_start_hostile_scheme_against_trigger = { + OR = { + can_start_scheme = { + type = murder + target_character = $TARGET$ + } + can_start_scheme = { + type = abduct + target_character = $TARGET$ + } + can_start_scheme = { + type = claim_throne + target_character = $TARGET$ + } + can_start_scheme = { + type = fabricate_hook + target_character = $TARGET$ + } + can_start_scheme = { + type = steal_back_artifact + target_character = $TARGET$ + } + } +} + +agent_valid_to_be_discovered_by_spymaster = { + trigger_if = { + limit = { + exists = scope:target.court_owner.cp:councillor_spymaster + } + NOT = { + this = scope:target.court_owner.cp:councillor_spymaster + } + } + NOT = { + has_character_flag = free_to_scheme + } + trigger_if = { + limit = { + exists = scope:target.court_owner + } + NOR = { + reverse_has_opinion_modifier = { + target = scope:target.court_owner + modifier = scheming_against_me + } + reverse_has_opinion_modifier = { + target = scope:target.court_owner + modifier = schemed_against_me + } + } + } +} + +personal_scheme_should_not_evaluate_tier_differences_trigger = { + # Your spouse doesn't care if you're a different rank than them. + scope:owner = { + NOT = { is_consort_of = scope:target } + } + # And laamps are never bothered either way. + scope:owner = { is_landless_adventurer = no } + scope:target = { is_landless_adventurer = no } +} + +personal_scheme_success_compare_target_liege_tier_trigger = { + is_landed_or_landless_administrative = no + exists = liege + OR = { + is_spouse_of = liege + is_close_family_of = liege + dynasty = liege.dynasty + } +} + +is_good_familial_murder_target_trigger = { + root = { + can_start_scheme = { + target_character = prev + type = murder + } + OR = { + AND = { # Psychopaths ignore opinion... + ai_greed >= very_high_positive_ai_value + ai_compassion <= very_high_negative_ai_value + has_trait = sadistic # Make sadistic people able to murder their own children + } + AND = { # Very greedy and non-compassionate characters almost ignore opinion... + ai_greed >= very_high_positive_ai_value + ai_compassion <= high_negative_ai_value + opinion = { + target = prev + value <= medium_positive_opinion + } + } + AND = { # Significantly greedy and non-compassionate characters can murder even at positive opinion + ai_greed >= high_positive_ai_value + ai_compassion < 0 + opinion = { + target = prev + value <= low_positive_opinion + } + } + AND = { # Somewhat greedy characters can murder people they just barely dislike... + ai_greed >= medium_positive_ai_value + opinion = { + target = prev + value <= low_negative_opinion + } + } + AND = { # Otherwise, their opinion must be rather poor... + opinion = { + target = prev + value <= medium_negative_opinion + } + } + } + } + NOR = { + has_opinion_modifier = { + modifier = received_title_county + target = root + } + has_opinion_modifier = { + modifier = received_title_duchy + target = root + } + has_opinion_modifier = { + modifier = received_title_kingdom + target = root + } + has_opinion_modifier = { + modifier = received_title_empire + target = root + } + } + #is a valid murder target if scheme owner is in line of succession to any of target's titles or at least 3rd in line of succession to any titles the target is 1st to inherit + OR = { + any_held_title = { + tier >= root.highest_held_title_tier + place_in_line_of_succession = { + target = root + value <= { + value = 2 + if = { + limit = { root.highest_held_title_tier > tier_barony } + add = 1 + } + } + } + } + any_heir_title = { + NOT = { holder = root } + tier >= root.highest_held_title_tier + place_in_line_of_succession = { + target = root + value <= { + value = 2 + if = { + limit = { root.highest_held_title_tier > tier_barony } + add = 1 + } + } + } + } + } +} + +# This trigger is a bit contrived in some way to ensure absolutely everyone gets evaluated without any early-outing +# It should always return true +# We use "count = all" and trigger_ifs to ensure that all have to be evaluated, and that all return +build_murder_targets_trigger = { + any_relation = { # Rivals are good targets for murder schemes + type = rival + count = all + trigger_if = { + limit = { + root = { + ai_honor <= low_positive_ai_value + can_start_scheme = { + target_character = prev + type = murder + } + } + } + add_to_temporary_list = murder_targets + } + } + any_relation = { # Same with nemeses + type = nemesis + count = all + trigger_if = { + limit = { + root = { + ai_honor <= medium_positive_ai_value + can_start_scheme = { + target_character = prev + type = murder + } + } + } + add_to_temporary_list = murder_targets + } + } + trigger_if = { # Greedy people have no qualms murdering their way up the succession... + limit = { + ai_greed >= low_positive_ai_value + exists = dynasty + } + dynasty = { + any_dynasty_member = { + count = all + trigger_if = { + limit = { + is_good_familial_murder_target_trigger = yes + } + add_to_temporary_list = murder_targets + } + } + } + any_close_or_extended_family_member = { + count = all + trigger_if = { + limit = { + NOT = { is_in_list = murder_targets } + is_good_familial_murder_target_trigger = yes + } + add_to_temporary_list = murder_targets + } + } + } + trigger_if = { # Greedy people want to murder their liege's high aptitude tax collector... + limit = { + ai_greed >= low_positive_ai_value + is_independent_ruler = no + exists = liege + liege = { + any_tax_collector = { + any_tax_collector_vassal = { + this = root + } + check_tax_collector_aptitude = { + CHARACTER = this + VALUE >= 4 + } + add_to_temporary_list = murder_targets + } + } + } + } + trigger_if = { # Some Clan members want to murder Extolled people out of pure spite and malice + limit = { + ai_greed >= 0 + ai_vengefulness >= 0 + ai_compassion <= medium_negative_ai_value + house.house_head ?= { + is_ruler = yes + government_has_flag = government_is_clan + } + ai_wants_low_unity = yes + } + house = { + any_house_member = { + has_trait = extolled + add_to_temporary_list = murder_targets + } + } + } + any_consort = { # Unfaithful spouses + trigger_if = { + limit = { + root = { + ai_compassion <= 0 + can_start_scheme = { + target_character = prev + type = murder + } + } + exposed_cheating_on_spouse_trigger = { SPOUSE = root } + add_to_temporary_list = murder_targets + } + } + } + trigger_if = { # Certain vassals will plot against their liege under certain conditions + limit = { + highest_held_title_tier > tier_barony + exists = liege + liege = { + tyranny >= medium_tyranny + } + opinion = { + target = liege + value <= high_negative_opinion + } + ai_rationality >= medium_positive_ai_value + } + liege = { + add_to_temporary_list = murder_targets + } + } + trigger_if = { # Murdering troublesome claimants is something you want to do... + limit = { + is_playable_character = yes + primary_title.tier >= tier_duchy + any_targeting_faction = { + faction_is_type = claimant_faction + special_character = { + add_to_temporary_list = murder_targets + } + } + } + } + trigger_if = { # Paranoid characters want to murder claimants to their titles + limit = { + has_trait = paranoid + ai_compassion <= low_negative_ai_value + ai_rationality <= 0 + is_playable_character = yes + primary_title.tier >= tier_duchy + any_held_title = { + any_claimant = { + add_to_temporary_list = murder_targets + } + } + } + } + any_spouse = { # Murder infertile spouses if you've yet to have an heir (and you're heartless...) + trigger_if = { + limit = { + root = { + is_playable_character = yes + ai_compassion <= 0 + ai_honor <= 0 + fertility > 0.1 + NOT = { + any_child = { + is_heir_of = root + } + } + can_start_scheme = { + target_character = prev + type = murder + } + } + is_ai = yes + fertility < 0.1 + add_to_temporary_list = murder_targets + } + } + } +} + +scheme_is_still_valid_trigger = { + scope:target = { + OR = { + exists = location + in_diplomatic_range = scope:owner + } + } +} + +can_use_befriend_scheme_trigger = { + OR = { + has_perk = befriend_perk + AND = { + exists = dynasty + dynasty = { + has_dynasty_perk = fp1_adventure_legacy_5 + } + target_is_vassal_or_below = $TARGET$ + } + culture = { has_cultural_parameter = automatic_befriend_access } + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = struggle_unlocks_befriend_schemes_for_everyone + } + AND = { + government_has_flag = government_is_clan + is_in_same_clan_as_trigger = { CHARACTER = $TARGET$ } + house = { has_house_unity_stage = harmonious } + } + government_has_flag = government_is_nomadic + } +} + +# Need to separate travel triggers from rest +can_seduce_scheme_trigger = { + $OWNER$ = { + is_adult = yes + is_imprisoned = no + OR = { + is_ai = no #Players may override their character's sexuality for the purposes of cynical seductions. + is_attracted_to_gender_of = $TARGET$ + } + is_below_ai_lover_soft_cap_trigger = yes + NOR = { + has_trait = celibate + has_character_flag = is_party_baron + has_relation_lover = $TARGET$ + guaranteed_under_20_incest_rejection_trigger = { + TARGET = $TARGET$ + SEDUCER = $OWNER$ + } + AND = { + has_character_modifier = rejected_from_marriage_bed_modifier + is_spouse_of = $TARGET$ + } + } + } + $TARGET$ = { + is_adult = yes + is_imprisoned = no + is_attracted_to_gender_of = $OWNER$ + NOR = { + has_character_flag = block_seduce_attempts + has_trait = intellect_bad_3 + has_trait = incapable + has_trait = celibate + has_opinion_modifier = { + modifier = seduce_permanent_blocker_opinion + target = $OWNER$ + } + has_opinion_modifier = { + modifier = seduce_regular_cooldown_opinion + target = $OWNER$ + } + } + OR = { + exists = location + in_diplomatic_range = $OWNER$ + } + trigger_if = { + limit = { + $OWNER$ = { is_ai = yes } + } + is_below_ai_lover_soft_cap_trigger = yes + trigger_if = { # Block AI from seducing lowborn nobodies in the players court + limit = { + liege ?= { is_ai = no } + NOR = { + is_courtier_of = $OWNER$ + is_foreign_court_or_pool_guest_of = $OWNER$ + } + } + OR = { + is_lowborn = no + is_playable_character = yes + } + } + trigger_if = { #So players don't get spammed by AI seduction + limit = { is_ai = no } + NOT = { + any_targeting_scheme = { scheme_type = seduce } + } + } + } + } +} + +################################################## +# Scheme Ending Triggers + +# Is this a scheme to kill someone who could be conceivably saved by something unexpected? +is_savable_murder_scheme_trigger = { + OR = { + scheme_type = murder + scheme_type = laamp_base_3011_contract_scheme + } +} + +# Could & would this lover of $TARGET$ +available_lover_to_sacrifice_in_murder_trigger = { + is_ruler = no + is_available_ai_adult = yes + # Filter out lovers that don't actually like you at all. + NOT = { has_trait = disloyal } + OR = { + has_trait = loyal + opinion = { + target = $TARGET$ + # And frankly this is being generous. + value >= 1 + } + } +} + +################################################## +# Murder Intercept Triggers + +# Would this character slack off from their task of guarding scope:target? +bodyguard_will_actually_do_job_trigger = { + # Basically functional. + is_ruler = no + is_physically_able_ai_adult = yes + # Can't hate their charge. + save_temporary_scope_as = char_temp + NOR = { + # Require that they don't hate their liege. + has_relation_rival = scope:target + opinion = { + target = scope:target + value <= high_negative_opinion + } + # Can't be directly involved with the scheme either. + scope:scheme = { + any_scheme_agent_character = { this = scope:char_temp } + } + scope:owner = scope:char_temp + } +} +foodtaster_will_actually_do_job_trigger = { + # Basically functional. + is_ruler = no + is_physically_able_ai_adult = yes + # Can't be directly involved with the scheme. + ## We're a bit pickier here, since food tasters can't just slack off from their duties like bodyguards or cupbearers arguably can. + ### You eat the food or you don't, so if you don't, you really must've planned ahead to look like you did. + save_temporary_scope_as = char_temp + NOR = { + scope:scheme = { + any_scheme_agent_character = { this = scope:char_temp } + } + scope:owner = scope:char_temp + } +} +cupbearer_will_actually_do_job_trigger = { + # Basically functional. + is_physically_able_ai_adult = yes + # Can't hate their charge. + save_temporary_scope_as = char_temp + NOR = { + # Require that they don't hate their liege. + has_relation_rival = scope:target + opinion = { + target = scope:target + value <= high_negative_opinion + } + # Can't be directly involved with the scheme either. + scope:scheme = { + any_scheme_agent_character = { this = scope:char_temp } + } + scope:owner = scope:char_temp + } +} + +################################################## +# Scheme Animation Triggers + +should_use_amorous_scheme_animation_trigger = { + OR = { + scheme_type = seduce + scheme_type = elope + scheme_type = courting + } +} + +################################################## +# Agent Invite Triggers + +would_agent_accept_petty_bribes_against_target_trigger = { + exists = scope:scheme + trigger_if = { + limit = { + exists = scope:scheme.scheme_target_character + } + NOT = { + scope:recipient = { is_parent_of = scope:scheme.scheme_target_character } + } + } + trigger_if = { + limit = { + exists = scope:scheme.scheme_target_title + } + NOT = { + scope:recipient = { is_parent_of = scope:scheme.scheme_target_title.holder } + } + } +} + +would_actor_consider_dramatic_enticement_trigger = { + scope:actor = { + OR = { + is_ai = no + has_trait = humble + has_trait = content + has_trait = profligate + AND = { + has_trait = vengeful + has_relation_rival = scope:recipient + } + AND = { + has_trait = impatient + NOR = { + has_trait = arrogant + has_trait = ambitious + } + } + } + } +} + +actor_has_valid_de_jure_enticement_county_trigger = { + holder = scope:actor + tier = tier_county + NOT = { this = scope:actor.capital_county } +} + +actor_has_valid_claimed_enticement_county_trigger = { + holder = scope:actor + tier = tier_county + NOT = { this = scope:actor.capital_county } +} + +################################################## +# Can Add Agent to Scheme Triggers + +is_valid_agent_standard_trigger = { + # The usual standard restrictions. + is_adult = yes + is_imprisoned = no + # Can't be an existing agent in any scheme. + save_temporary_scope_as = char_temp + scope:owner = { + NOT = { + any_scheme = { + any_scheme_agent_character = { this = scope:char_temp } + } + } + } +} + +char_can_fit_into_scheme_trigger = { + save_temporary_scope_as = char_temp + $SCHEME$ = { + any_scheme_agent_slot = { + is_filled = no + save_temporary_scope_as = slot_temp + } + scope:char_temp = { is_valid_as_agent_in_slot = scope:slot_temp } + } +} + +################################################## +# Scheme APA Triggers + +scheme_apa_apply_modifier_plus_secrecy_trigger = { + #TODO_CD_EP3_ERCC; ask for scheme secrecy trigger. + scheme_apa_apply_modifier_trigger = { MODIFIER = $MODIFIER$ } +} + +scheme_apa_apply_modifier_trigger = { + NOR = { + has_variable = scheme_pulse_action_on_cooldown + has_scheme_modifier = $MODIFIER$ + } +} + +scheme_apa_apply_positive_progress_trigger = { + NOT = { has_variable = scheme_pulse_action_on_cooldown } + # How many days in before we want to allow progress gains? + scheme_duration_days >= 365 +} + +scheme_apa_apply_negative_progress_trigger = { + NOT = { has_variable = scheme_pulse_action_on_cooldown } + save_temporary_scope_as = scheme + scheme_progress > scheme_progress_33 +} + +################################################## +# Agent Availability Triggers + +can_have_agent_hitman_trigger = { always = yes } +can_have_agent_assassin_trigger = { always = yes } +can_have_agent_lookout_trigger = { always = yes } +can_have_agent_infiltrator_trigger = { always = yes } +can_have_agent_footpad_trigger = { always = yes } +can_have_agent_alibi_trigger = { always = yes } +can_have_agent_thug_trigger = { always = yes } +can_have_agent_comrade_in_arms_trigger = { always = yes } +can_have_agent_socialite_trigger = { always = yes } +can_have_agent_musician_trigger = { always = yes } +can_have_agent_tumbler_trigger = { always = yes } +can_have_agent_poet_trigger = { always = yes } +can_have_agent_gabbler_trigger = { always = yes } +can_have_agent_shill_trigger = { always = yes } +can_have_agent_diplomat_trigger = { always = yes } +can_have_agent_justiciar_trigger = { always = yes } +can_have_agent_justiciar_speed_trigger = { always = yes } +can_have_agent_scribe_trigger = { always = yes } +can_have_agent_cleric_trigger = { always = yes } +can_have_agent_theologian_trigger = { always = yes } +can_have_agent_herald_trigger = { always = yes } +can_have_agent_wolf_hunter_trigger = { always = yes } +can_have_agent_thief_trigger = { always = yes } +can_have_agent_tutor_trigger = { always = yes } +can_have_agent_poisoner_trigger = { + domicile ?= { has_domicile_parameter = camp_unlocks_poisoner_scheme_agents } +} +can_have_agent_muscle_trigger = { always = yes } +can_have_agent_drillmaster_trigger = { always = yes } +can_have_agent_tracker_trigger = { always = yes } +can_have_agent_physic_trigger = { always = yes } +can_have_agent_smith_trigger = { always = yes } +can_have_agent_ambusher_trigger = { always = yes } +can_have_agent_bodyguard_trigger = { always = yes } +can_have_agent_scout_trigger = { always = yes } +can_have_agent_outrider_trigger = { always = yes } +can_have_agent_bookkeeper_trigger = { always = yes } +can_have_agent_bailiff_trigger = { always = yes } +can_have_agent_draughtsman_trigger = { always = yes } +can_have_agent_planner_trigger = { always = yes } +can_have_agent_supplier_trigger = { always = yes } +can_have_agent_outcast_trigger = { always = yes } +can_have_agent_wrangler_trigger = { always = yes } +can_have_agent_decoy_trigger = { always = yes } +can_have_agent_eunuch_trigger = { always = yes } +can_have_agent_wrangler_speed_trigger = { always = yes } +can_have_agent_theologian_success_trigger = { always = yes } +can_have_agent_cleric_success_trigger = { always = yes } +can_have_agent_lookout_success_trigger = { always = yes } +can_have_agent_lookout_speed_trigger = { always = yes } + +################################################## +# Countermeasure Triggers + +# Does a specific countermeasure apply to you? +countermeasure_parametre_applies_againt_char_trigger = { + $SCHEME_TARGET$.host ?= { + has_scheme_countermeasure_parameter = $PARAMETER$ + # Don't apply countermeasures vs. ourselves. + NOT = { this = $SCHEME_OWNER$ } + # And if the countermeasure only affects the host, then restrict it. + trigger_if = { + limit = { has_scheme_countermeasure_parameter = countermeasure_only_affects_court_holder } + this = $SCHEME_TARGET$ + } + } +} + +# Can a character adopt defensive measures against hostile schemes? +can_set_own_countermeasures_trigger = { + custom_tooltip = { + OR = { + # You can only set them for your home court. + host = prev + # And then we use this in here so we can valid + ## ... valid what, Ewan? _What can we valid_? You never finished your sentence and now we will never know. + is_ruler = no + } + text = can_set_own_countermeasures_trigger.tt + } +} + +# Used in scripted modifiers to determine if the AI should be deploying countermeasures that reduce secrecy or generally affect success chance. +should_ai_take_preemptive_countermeasures_trigger = { + # Don't do this if we've already deployed countermeasures. + NOT = { has_scheme_countermeasure_parameter = has_any_countermeasure_active } + any_targeting_scheme = { + # Make sure we'd need to do this at all. + has_variable = apply_countermeasures + # And we don't want to face schemes that're already at a later stage. + is_scheme_exposed = no + # Buuuut also give them their grace period to get started. + has_variable = secrecy_grace_period + var:secrecy_grace_period <= 0 + } +} + +################################################## +# Countermeasure Access Triggers + +# This trigger means that a character will only ever have access to the best version of a given countermeasure. +## Please note that some tiers may be inaccessible: they're set up so they can be hooked in to stuff, but we haven't assigned them all out straight away. +## Use them if you want them but don't feel obligated, basically. +scheme_countermeasure_access_select_best_tier_trigger = { + save_temporary_scope_value_as = { + name = checked_tier + value = $TIER$ + } + trigger_if = { + limit = { scheme_countermeasure_access_t4_$COUNTERMEASURE$_trigger = yes } + scope:checked_tier = 4 + } + trigger_else_if = { + limit = { scheme_countermeasure_access_t3_$COUNTERMEASURE$_trigger = yes } + scope:checked_tier = 3 + } + trigger_else_if = { + limit = { scheme_countermeasure_access_t2_$COUNTERMEASURE$_trigger = yes } + scope:checked_tier = 2 + } + trigger_else = { scope:checked_tier = 1 } +} + +# Can this character access the higher tiers of the Bounties for Whispers countermeasure? +scheme_countermeasure_access_t2_bounties_for_whispers_trigger = { + OR = { + has_trait_with_flag = trait_unlocks_t2_countermeasures + culture = { has_cultural_parameter = cultrad_unlocks_t2_countermeasures } + } +} +scheme_countermeasure_access_t3_bounties_for_whispers_trigger = { + always = no +} +scheme_countermeasure_access_t4_bounties_for_whispers_trigger = { + OR = { + culture = { has_cultural_parameter = cultrad_unlocks_t4_bounties_for_whispers } + faith = { has_doctrine_parameter = tenet_unlocks_t4_bounties_for_whispers } + } +} + +# Can this character access the higher tiers of the Arbitrary Arrests countermeasure? +scheme_countermeasure_access_t2_arbitrary_arrests_trigger = { + OR = { + has_trait_with_flag = trait_unlocks_t2_countermeasures + has_trait_with_flag = trait_unlocks_t2_arbitrary_arrests + culture = { has_cultural_parameter = cultrad_unlocks_t2_countermeasures } + } +} +scheme_countermeasure_access_t3_arbitrary_arrests_trigger = { + culture = { has_cultural_parameter = cultrad_unlocks_t3_arbitrary_arrests } +} +scheme_countermeasure_access_t4_arbitrary_arrests_trigger = { + always = no +} + +# Can this character access the higher tiers of the Strengthen Sentries countermeasure? +scheme_countermeasure_access_t2_strengthen_sentries_trigger = { + OR = { + has_trait_with_flag = trait_unlocks_t2_countermeasures + culture = { has_cultural_parameter = cultrad_unlocks_t2_countermeasures } + } +} +scheme_countermeasure_access_t3_strengthen_sentries_trigger = { + culture = { has_cultural_parameter = cultrad_unlocks_t3_strengthen_sentries } +} +scheme_countermeasure_access_t4_strengthen_sentries_trigger = { + always = no +} + +# Can this character access the higher tiers of the Redouble Guards countermeasure? +scheme_countermeasure_access_t2_redouble_guards_trigger = { + OR = { + has_trait_with_flag = trait_unlocks_t2_countermeasures + culture = { + OR = { + has_cultural_parameter = cultrad_unlocks_t2_countermeasures + has_cultural_parameter = cultrad_unlocks_t2_redouble_guards + } + } + } +} +scheme_countermeasure_access_t3_redouble_guards_trigger = { + culture = { has_cultural_parameter = cultrad_unlocks_t3_redouble_guards } +} +scheme_countermeasure_access_t4_redouble_guards_trigger = { + always = no +} + +# Can this character access the higher tiers of the Withdraw from View countermeasure? +scheme_countermeasure_access_t2_withdraw_from_view_trigger = { + OR = { + OR = { + has_trait_with_flag = trait_unlocks_t2_countermeasures + culture = { has_cultural_parameter = cultrad_unlocks_t2_countermeasures } + } + has_trait_with_flag = trait_unlocks_t2_withdraw_from_view + } +} +scheme_countermeasure_access_t3_withdraw_from_view_trigger = { + OR = { + has_trait_with_flag = trait_unlocks_t3_withdraw_from_view + faith = { has_doctrine_parameter = tenet_unlocks_t3_withdraw_from_view } + } +} +scheme_countermeasure_access_t4_withdraw_from_view_trigger = { + has_trait_with_flag = trait_unlocks_t4_withdraw_from_view +} + +scheme_generic_ai_blocker_trigger = { + any_scheme = { + OR = { + scheme_type = befriend + scheme_type = sway + scheme_type = seduce + scheme_type = courting + scheme_type = elope + scheme_type = learn_language + scheme_type = teach_governor + } + } +} diff --git a/common/scripted_triggers/00_scripted_rule_triggers.txt b/common/scripted_triggers/00_scripted_rule_triggers.txt new file mode 100644 index 00000000..c580db2f --- /dev/null +++ b/common/scripted_triggers/00_scripted_rule_triggers.txt @@ -0,0 +1,134 @@ +#Controls the can_raid rule. +can_raid_trigger = { + OR = { + # Government logic. + government_has_flag = government_can_raid_rule + ## Admin - Frontier themes + vassal_contract_has_flag = admin_theme_can_raid + ## Clan - Ghazi + vassal_contract_has_flag = vassal_contract_allow_raiding + # Faith Logic. + faith = { has_doctrine_parameter = faith_can_raid } + # Dynasty logic. + dynasty ?= { + OR = { + can_raid_dynasty_modifiers_that_enable_raiding_overseas_list_trigger = yes + can_raid_dynasty_modifiers_that_enable_raiding_overland_list_trigger = yes + } + } + # House logic. + house ?= { + OR = { + can_raid_house_modifiers_that_enable_raiding_overseas_list_trigger = yes + can_raid_house_modifiers_that_enable_raiding_overland_list_trigger = yes + } + } + # Cultural logic. + ## With restrictions. + AND = { + can_raid_cultural_parameter_requirements_for_non_tribals_trigger = yes + culture = { + OR = { + has_cultural_parameter = culture_can_raid_at_sea_even_if_feudal + has_cultural_parameter = culture_can_raid_over_land_even_if_feudal + } + } + } + ## Without restrictions. + culture = { + OR = { + has_cultural_parameter = culture_can_raid_at_sea_even_if_feudal_no_restrictions + has_cultural_parameter = culture_can_raid_over_land_even_if_feudal_no_restrictions + } + } + # Trait logics. + ## With restrictions. + AND = { + can_raid_trait_flag_standard_requirements_trigger = yes + has_trait_with_flag = trait_enable_raiding_per_standard_restrictions + } + ## Without restrictions. + has_trait_with_flag = trait_enable_raiding_without_restrictions + } + # Some faiths prohibit this. + OR = { + NOR = { + faith = { has_doctrine_parameter = holy_wars_forbidden } + government_has_flag = government_is_landless_adventurer + } + # But not for Nomads + government_has_flag = government_is_nomadic + } +} + +# Here so that you can plug in whatever dynasty modifiers you want without overwriting the whole scripted rule trigger. +can_raid_dynasty_modifiers_that_enable_raiding_overseas_list_trigger = { + OR = { + # Yes, I realise the OR is redundant till someone else puts something in here. Shoosh. + has_dynasty_modifier = fp1_legacy_of_piracy_modifier + } +} +can_raid_dynasty_modifiers_that_enable_raiding_overland_list_trigger = { + OR = { + # Yes, I realise the OR is redundant till someone else puts something in here. Shoosh. + # Always = no because we have no vanilla use-case atm — the assumption is that modders'll overwrite it. + always = no + } +} + +# Here so that you can plug in whatever house modifiers you want without overwriting the whole scripted rule trigger. +can_raid_house_modifiers_that_enable_raiding_overseas_list_trigger = { + OR = { + # Yes, I realise the OR is redundant till someone else puts something in here. Shoosh. + # Always = no because we have no vanilla use-case atm — the assumption is that modders'll overwrite it. + always = no + } +} +can_raid_house_modifiers_that_enable_raiding_overland_list_trigger = { + OR = { + # Yes, I realise the OR is redundant till someone else puts something in here. Shoosh. + # Always = no because we have no vanilla use-case atm — the assumption is that modders'll overwrite it. + always = no + } +} + +# Here so that you can tweak the rules on how non-tribals raid via CulTrad without overriding the whole scripted rule trigger. +can_raid_cultural_parameter_requirements_for_non_tribals_trigger = { + OR = { + highest_held_title_tier <= tier_duchy + realm_size <= minor_realm_size + } +} + +# Here so that you can tweak the rules on which innovations allow raiding without overriding the whole scripted rule trigger. +can_ran_raid_overseas_cultural_innovations_trigger = { + OR = { + has_innovation = innovation_longboats + has_innovation = innovation_african_canoes + } +} + +# Here so that you can tweak the rules on characters with a trait that lets them raid under certain circumstances raid without overriding the whole scripted rule trigger. +can_raid_trait_flag_standard_requirements_trigger = { + # We don't use this in vanilla, so we don't have any actual requirements atm. + always = yes +} + +can_raid_across_water_trigger = { + OR = { + # Culture logic. + culture = { + OR = { + can_ran_raid_overseas_cultural_innovations_trigger = yes + has_cultural_parameter = culture_can_raid_at_sea_even_if_feudal + has_cultural_parameter = culture_can_raid_at_sea_even_if_feudal_no_restrictions + } + } + # Dynasty logic. + dynasty ?= { can_raid_dynasty_modifiers_that_enable_raiding_overseas_list_trigger = yes } + # House logic. + house ?= { can_raid_house_modifiers_that_enable_raiding_overseas_list_trigger = yes } + #Is Hereward. + has_trait = the_wake + } +} diff --git a/common/scripted_triggers/00_scripted_triggers.txt b/common/scripted_triggers/00_scripted_triggers.txt index bbcfd14b..66dd9045 100644 --- a/common/scripted_triggers/00_scripted_triggers.txt +++ b/common/scripted_triggers/00_scripted_triggers.txt @@ -292,7 +292,7 @@ can_be_granted_titles_by = { #This is set up with trigger-ifs to allow for nice limit = { is_ruler = no #Rulers can always get additional titles is_theocratic_lessee = no #Theocratic lessees use other gender checks - NOT = { $RULER$ = { has_government = administrative_government } } + NOT = { $RULER$ = { government_has_flag = government_is_administrative } } NOT = { $RULER$.faith = { has_dominant_ruling_gender = scope:title_grantee @@ -318,7 +318,7 @@ can_be_granted_titles_by = { #This is set up with trigger-ifs to allow for nice is_ruler = no #Rulers can always get additional titles is_theocratic_lessee = no #Theocratic lessees use other gender checks $RULER$ = { - has_government = administrative_government + government_has_flag = government_is_administrative NOT = { has_realm_law = equal_law } } } @@ -373,8 +373,9 @@ activate_disease_data_tracking_trigger = { vassal_contract_can_be_modified_trigger = { custom_description = { text = vassal_contract_can_be_modified - vassal_contract_has_modifiable_obligations = yes - vassal_contract_is_blocked_from_modification = no + is_vassal_of = liege # To ensure we are actually a vassal and not a tributary + subject_contract_has_modifiable_obligations = yes + subject_contract_is_blocked_from_modification = no } } diff --git a/common/scripted_triggers/00_secret_triggers.txt b/common/scripted_triggers/00_secret_triggers.txt new file mode 100644 index 00000000..65bb3b77 --- /dev/null +++ b/common/scripted_triggers/00_secret_triggers.txt @@ -0,0 +1,595 @@ + +#Triggers revolving around secrets + +#has_secret_unknown_by_root_trigger +#Being_blackmailed_by_root_trigger +#is_blackmailable_secret_trigger +#secret_is_always_interesting_trigger + + + + + +has_secret_unknown_by_root_trigger = { + any_secret = { + NOT = { + is_known_by = root + } + } +} + +being_blackmailed_by_root_trigger = { + root = { + OR = { + has_hook_of_type = { + target = prev + type = weak_blackmail_hook + } + has_hook_of_type = { + target = prev + type = strong_blackmail_hook + } + } + } +} + +is_blackmailable_secret_trigger = { #Should not include is known + $PARTICIPANT$ = { save_temporary_scope_as = is_blackmailable_secret_participant } + $BLACKMAILER$ = { save_temporary_scope_as = is_blackmailable_secret_blackmailer } + is_shunned_or_criminal_for = scope:is_blackmailable_secret_participant + can_be_exposed_by = scope:is_blackmailable_secret_blackmailer + #Can we actually add a hook of the correct type + trigger_if = { + limit = { is_shunned_for = scope:is_blackmailable_secret_participant } + custom_description = { + text = "already_has_a_superior_hook" + subject = scope:is_blackmailable_secret_blackmailer + object = scope:is_blackmailable_secret_participant + scope:is_blackmailable_secret_blackmailer = { + can_add_hook = { + type = weak_blackmail_hook + target = scope:is_blackmailable_secret_participant + } + } + } + } + trigger_if = { + limit = { is_criminal_for = scope:is_blackmailable_secret_participant } + custom_description = { + text = "already_has_a_superior_hook" + subject = scope:is_blackmailable_secret_blackmailer + object = scope:is_blackmailable_secret_participant + scope:is_blackmailable_secret_blackmailer = { + can_add_hook = { + type = strong_blackmail_hook + target = scope:is_blackmailable_secret_participant + } + } + } + } + #If an AI promised not to reveal a secret they have to be very dishonest to do it + trigger_if = { + limit = { exists = var:promised_not_to_reveal} + custom_description = { + text = "promised_not_to_reveal_secret" + var:promised_not_to_reveal = scope:is_blackmailable_secret_blackmailer + scope:is_blackmailable_secret_blackmailer = { + is_ai = yes + ai_honor <= medium_negative_ai_value + } + } + } + + #Some things you can't blackmail others about + custom_description = { + text = "cant_blackmail_another_witch" + subject = scope:is_blackmailable_secret_blackmailer + NAND = { + secret_type = secret_witch + scope:is_blackmailable_secret_blackmailer = { is_witch_trigger = yes } + } + } + # Can't blackmail a crypto-religionist of the same faith + trigger_if = { + limit = { secret_type = secret_crypto_religionist } + custom_description = { + text = cannot_blackmail_crypto_religionist_of_same_faith + scope:is_blackmailable_secret_blackmailer = { + NOR = { + exists = secret_faith + secret_faith ?= scope:is_blackmailable_secret_participant.secret_faith + } + } + } + } + trigger_if = { + limit = { secret_type = secret_lover } + custom_description = { + text = cannot_blackmail_own_lover_secret + NOT = { secret_target = scope:is_blackmailable_secret_blackmailer } + } + } + trigger_if = { + limit = { + secret_type = secret_unmarried_illegitimate_child + } + custom_description = { + text = cannot_blackmail_over_own_bastard + secret_target = { + NOR = { + mother = scope:is_blackmailable_secret_blackmailer + real_father = scope:is_blackmailable_secret_blackmailer + } + } + } + } + trigger_if = { + limit = { + secret_type = secret_disputed_heritage + } + custom_description = { + text = cannot_blackmail_over_own_bastard + NOT = { + secret_target = { + OR = { + mother = scope:is_blackmailable_secret_blackmailer + real_father = scope:is_blackmailable_secret_blackmailer + } + } + } + } + } +} + + +secret_is_always_interesting_trigger = { #Even if they can't be used for blackmail + OR = { + secret_type = secret_lover + secret_type = secret_murder + secret_type = secret_murder_attempt + secret_type = secret_disputed_heritage + secret_type = secret_unmarried_illegitimate_child + secret_type = secret_crypto_religionist + } +} + + +#Checks whether a secret would incriminate its secret target if known + #Parameters: + # TARGET +secret_is_incriminating_trigger = { + OR = { + exists = secret_target + any_secret_participant = { + count >= 1 + } + } + OR = { + AND = { + secret_type = secret_lover + secret_target = $TARGET$ + } + AND = { + secret_type = secret_disputed_heritage + OR = { + secret_target = $TARGET$ + secret_target.mother = $TARGET$ + any_secret_participant = { + this = $TARGET$ + } + } + } + AND = { + secret_type = secret_unmarried_illegitimate_child + OR = { + secret_target = $TARGET$ + secret_target.mother = $TARGET$ + any_secret_participant = { + this = $TARGET$ + } + } + } + } +} + + + +###Expose secret triggers### + +block_exposed_secret_general_notifications = { #Because you're already getting your own, special event + OR = { + #Is one of the involved parties + this = scope:secret_exposer + this = scope:exposed_secret_character + this = scope:exposed_secret_owner + AND = { + exists = scope:exposed_secret_target + this = scope:exposed_secret_target + } + #For lover secret: No events for spouses or lovers, they get infidelity_confrontation.1000 instead + trigger_if = { + limit = { scope:secret = { secret_type = secret_lover } } + OR = { + is_spouse_of = scope:exposed_secret_owner + has_relation_lover = scope:exposed_secret_owner + is_spouse_of = scope:exposed_secret_target + has_relation_lover = scope:exposed_secret_target + } + } + #For bastard secrets: No events for child mother and real father + trigger_else_if = { + limit = { + scope:secret = { + OR = { + secret_type = secret_disputed_heritage + secret_type = secret_unmarried_illegitimate_child + } + } + } + OR = { + scope:exposed_secret_target.mother = scope:show_me #mother + scope:exposed_secret_target.real_father = scope:show_me #real father + } + } + trigger_else = { } #Just to avoid errors + } +} + + +show_me_exposed_secret_event_trigger = { + expose_secret_scope_saving_trigger = { SECRET = $SECRET$ CHARACTER = $CHARACTER$ } #Saves show_me, exposed_secret_character, exposed_secret_owner & exposed_secret_target + block_exposed_secret_general_notifications = no #Isn't the owner/target/exposer or other involved character + #Is someone who cares + OR = { + is_spouse_of_even_if_dead = scope:exposed_secret_character + is_close_family_of = scope:exposed_secret_character + AND = { + exists = scope:exposed_secret_character.player_heir + scope:exposed_secret_character = { player_heir = scope:show_me } + } + AND = { + scope:exposed_secret_character = { exists = liege } + scope:exposed_secret_character = { liege = scope:show_me } + } + AND = { #For bastards, fathers also care + $SECRET$ = { secret_type = secret_disputed_heritage } + exists = scope:father + this = scope:father + } + } +} + +show_me_exposed_secret_feed_message_trigger = { + expose_secret_scope_saving_trigger = { SECRET = $SECRET$ CHARACTER = $CHARACTER$ } #Saves show_me, exposed_secret_character, exposed_secret_owner & exposed_secret_target + block_exposed_secret_general_notifications = no #Isn't the owner/target/exposer or other involved character + NOT = { show_me_exposed_secret_event_trigger = { SECRET = $SECRET$ CHARACTER = $CHARACTER$ } } #I.e. hasn't already been notified +} + +expose_secret_scope_saving_trigger = { #Because we save the same scopes in two triggers that need to be the same + save_temporary_scope_as = show_me + $CHARACTER$ = { + save_temporary_scope_as = exposed_secret_character #Most of the time this is owner, but for secrets with targets/other involved parties it can also be them + } + $SECRET$ = { + secret_owner = { save_temporary_scope_as = exposed_secret_owner } + trigger_if = { + limit = { exists = secret_target } + secret_target = { save_temporary_scope_as = exposed_secret_target } + } + } +} + +###Triggers for give_random_likely_secret_effect + +give_random_likely_secret_murder_attempt_victim_trigger = { + is_ai = yes + save_temporary_scope_as = victim + scope:murderer = { + NOT = { + any_secret = { + secret_type = secret_murder_attempt + secret_target = scope:victim + } + } + } +} + +give_random_likely_secret_lover_trigger = { + is_adult = yes + is_ai = yes + NOT = { any_relation = { type = lover this = scope:lover_1 } } + NOT = { is_spouse_of = scope:lover_1 } + NOT = { has_trait = celibate } + opinion = { + target = scope:lover_1 + value >= 20 + } + reverse_opinion = { + target = scope:lover_1 + value >= 20 + } + save_temporary_scope_as = lover_2 + possible_mutual_interest_trigger = { CHARACTER_1 = scope:lover_1 CHARACTER_2 = scope:lover_2 } +} + +give_random_likely_secret_incestous_lover_trigger = { + is_adult = yes + is_ai = yes + NOT = { any_relation = { type = lover this = scope:lover_1 } } + NOT = { is_spouse_of = scope:lover_1 } + OR = { + save_temporary_scope_as = lover_2 + possible_mutual_interest_trigger = { CHARACTER_1 = scope:lover_1 CHARACTER_2 = scope:lover_2 } + AND = { + matching_gender_and_sexuality_trigger = { CHARACTER_1 = scope:lover_1 CHARACTER_2 = scope:lover_2 } + opinion = { + target = scope:lover_1 + value >= 40 + } + reverse_opinion = { + target = scope:lover_1 + value >= 40 + } + } + } +} + + +#Simple Check if a given Secret Type is blackmailable + # NOTE THAT THIS CAN ONLY EVER CORRECTLY EVALUATE SECRETS THAT THE TARGET DOES NOT ALREADY HAVE + # ALSO NOTE THAT IT WILL ONLY EVER RETURN TRUE FOR SECRETS THAT ARE NOT RELIANT ON HAVING A VALID TARGET +secret_type_is_blackmailable_simple_trigger = { + # TYPE + # TARGET + + save_temporary_scope_value_as = { + name = type_flag + value = flag:$TYPE$ + } + + trigger_if = { + limit = { + scope:type_flag = flag:secret_deviant + } + secret_deviant_is_valid_trigger = { + OWNER = $TARGET$ + } + OR = { + secret_deviant_is_shunned_trigger = { + OWNER = $TARGET$ + } + secret_deviant_is_criminal_trigger = { + OWNER = $TARGET$ + } + } + } + trigger_else_if = { + limit = { + scope:type_flag = flag:secret_homosexual + } + secret_homosexual_is_valid_trigger = { + OWNER = $TARGET$ + } + OR = { + secret_homosexual_is_shunned_trigger = { + OWNER = $TARGET$ + } + secret_homosexual_is_criminal_trigger = { + OWNER = $TARGET$ + } + } + } + trigger_else_if = { + limit = { + scope:type_flag = flag:secret_cannibal + } + secret_cannibal_is_valid_trigger = { + OWNER = $TARGET$ + } + OR = { + secret_cannibal_is_shunned_trigger = { + OWNER = $TARGET$ + } + secret_cannibal_is_criminal_trigger = { + OWNER = $TARGET$ + } + } + } + trigger_else_if = { + limit = { + scope:type_flag = flag:secret_non_believer + } + secret_non_believer_is_valid_trigger = { + OWNER = $TARGET$ + } + OR = { + secret_non_believer_is_shunned_trigger = { + OWNER = $TARGET$ + } + secret_non_believer_is_criminal_trigger = { + OWNER = $TARGET$ + } + } + } + trigger_else_if = { + limit = { + scope:type_flag = flag:secret_incest + } + secret_incest_is_valid_trigger = { + OWNER = $TARGET$ + } + OR = { + secret_incest_is_shunned_trigger = { + OWNER = $TARGET$ + } + secret_incest_is_criminal_trigger = { + OWNER = $TARGET$ + } + } + } + trigger_else_if = { + limit = { + scope:type_flag = flag:secret_witch + } + secret_witch_is_valid_trigger = { + OWNER = $TARGET$ + } + OR = { + secret_witch_is_shunned_trigger = { + OWNER = $TARGET$ + } + secret_witch_is_criminal_trigger = { + OWNER = $TARGET$ + } + } + NOT = { + $BLACKMAILER$ = { is_witch_trigger = yes } + } + } + trigger_else_if = { + limit = { + scope:type_flag = flag:secret_crypto_religionist + } + secret_crypto_religionist_is_valid_trigger = { + OWNER = $TARGET$ + } + OR = { + secret_crypto_religionist_is_shunned_trigger = { + OWNER = $TARGET$ + } + secret_crypto_religionist_is_criminal_trigger = { + OWNER = $TARGET$ + } + } + } + trigger_else = { #Murder stuff, Bastard secrets, etc. + always = no + } +} + + +random_blackmailable_secret_can_be_added_simple_trigger = { + $TARGET$ = { save_temporary_scope_as = target } + OR = { + AND = { + secret_type_is_blackmailable_simple_trigger = { + TYPE = secret_deviant + TARGET = scope:target + BLACKMAILER = $BLACKMAILER$ + } + scope:target = { + NOT = { + any_secret = { + secret_type = secret_deviant + } + } + } + } + AND = { + secret_type_is_blackmailable_simple_trigger = { + TYPE = secret_homosexual + TARGET = scope:target + BLACKMAILER = $BLACKMAILER$ + } + scope:target = { + NOT = { + any_secret = { + secret_type = secret_homosexual + } + } + } + } + AND = { + secret_type_is_blackmailable_simple_trigger = { + TYPE = secret_cannibal + TARGET = scope:target + BLACKMAILER = $BLACKMAILER$ + } + scope:target = { + NOT = { + any_secret = { + secret_type = secret_cannibal + } + } + } + } + AND = { + secret_type_is_blackmailable_simple_trigger = { + TYPE = secret_non_believer + TARGET = scope:target + BLACKMAILER = $BLACKMAILER$ + } + scope:target = { + NOT = { + any_secret = { + secret_type = secret_non_believer + } + } + } + } + AND = { + secret_type_is_blackmailable_simple_trigger = { + TYPE = secret_incest + TARGET = scope:target + BLACKMAILER = $BLACKMAILER$ + } + scope:target = { + NOT = { + any_secret = { + secret_type = secret_incest + } + } + } + } + AND = { + secret_type_is_blackmailable_simple_trigger = { + TYPE = secret_witch + TARGET = scope:target + BLACKMAILER = $BLACKMAILER$ + } + scope:target = { + NOT = { + any_secret = { + secret_type = secret_witch + } + } + } + } + AND = { + secret_type_is_blackmailable_simple_trigger = { + TYPE = secret_crypto_religionist + TARGET = scope:target + BLACKMAILER = $BLACKMAILER$ + } + scope:target = { + NOT = { + any_secret = { + secret_type = secret_crypto_religionist + } + } + } + } + } +} + +# If during the council task find secret's the spymaster can fabricate a hook on the target +spymaster_task_courtier_valid_for_hook_fabrication_trigger = { + is_available_ai_adult = yes + save_temporary_scope_as = target_check + NOR = { + this = scope:councillor + root = { + has_hook = scope:target_check + } + root = { + any_scheme = { + scheme_target_character = scope:target_character + scheme_is_character_agent = scope:target_check + } + } + any_secret = { # Should prioritise actually finding Secrets + is_known_by = root + } + } +} + diff --git a/common/scripted_triggers/00_secret_type_triggers.txt b/common/scripted_triggers/00_secret_type_triggers.txt index 91aa58b1..fa39ab5f 100644 --- a/common/scripted_triggers/00_secret_type_triggers.txt +++ b/common/scripted_triggers/00_secret_type_triggers.txt @@ -5,6 +5,7 @@ # SECRET DEVIANT secret_deviant_is_valid_trigger = { $OWNER$ = { + is_adult = yes NOT = { has_trait = deviant } @@ -33,6 +34,7 @@ secret_deviant_is_criminal_trigger = { # SECRET HOMOSEXUAL secret_homosexual_is_valid_trigger = { $OWNER$ = { + is_adult = yes NOT = { has_trait = sodomite } @@ -323,6 +325,7 @@ secret_non_believer_is_criminal_trigger = { # SECRET INCEST secret_incest_is_valid_trigger = { $OWNER$ = { + is_adult = yes NOT = { has_trait = incestuous } @@ -424,8 +427,8 @@ secret_coup_plotter_is_valid_trigger = { # Can't coup yourself NOT = { $OWNER$ = $TARGET$ } # Both of y'all must still be admin - $OWNER$ = { has_government = administrative_government } - $TARGET$ = { has_government = administrative_government } + $OWNER$ = { government_has_flag = government_is_administrative } + $TARGET$ = { government_has_flag = government_is_administrative } } secret_coup_plotter_is_criminal_trigger = { diff --git a/common/scripted_triggers/00_sibling_triggers.txt b/common/scripted_triggers/00_sibling_triggers.txt new file mode 100644 index 00000000..5261531f --- /dev/null +++ b/common/scripted_triggers/00_sibling_triggers.txt @@ -0,0 +1,18 @@ + +###TRIGGER LIST + +# has_adult_friendly_unlanded_sibling_trigger + + +has_adult_friendly_unlanded_sibling_trigger = { + any_sibling = { + is_landed_or_landless_administrative = no + is_adult = yes + opinion = { + target = root + value > 30 + } + } +} + + diff --git a/common/scripted_triggers/00_single_combat_scripted_triggers.txt b/common/scripted_triggers/00_single_combat_scripted_triggers.txt new file mode 100644 index 00000000..0f0235b3 --- /dev/null +++ b/common/scripted_triggers/00_single_combat_scripted_triggers.txt @@ -0,0 +1,79 @@ + +################################################## +# GENERIC TRIGGERS + +# Note: this is a very stripped down trigger set. It's expected that it'll be parsed through something that parses out more typically unsuitable candidates (e.g., prisoners under most circumstances). +can_start_single_combat_trigger = { + # Check for the usual stuff. + can_start_single_combat_eligibility_checks_trigger = yes + # And filter out those who can never be in single combat. + can_start_single_combat_banned_checks_trigger = no +} + +can_start_single_combat_eligibility_checks_trigger = { + # Remove children and the cripplingly-old. + is_adult = yes + custom_description = { + text = banned_from_combat_old_and_frail + NOT = { + AND = { + age >= 70 + prowess < 10 + } + } + } + # Filter out traits. + NOR = { + has_trait = pregnant + has_trait = incapable + has_trait = blind + } + # Check other scripted triggers + has_contagious_deadly_disease_trigger = no +} + +can_start_single_combat_banned_checks_trigger = { + # Currently, we just *always* filter anyone who's already in a bout. + exists = var:engaged_in_single_combat +} + +# Does the character have a trait with a notably beneficial special combat move? +has_relevant_special_single_combat_trait_trigger = { + OR = { + has_trait = lifestyle_blademaster + has_trait = lifestyle_hunter + has_trait = berserker + has_trait = shieldmaiden + has_trait = varangian + has_trait = deviant + has_trait = viking + } +} + +################################################## +# MOVE TRIGGERS + +single_combat_location_has_crocodilians_trigger = { + scope:sc_defender.location = { + # First, we look at supra regions. + OR = { + geographical_region = world_africa_west + geographical_region = world_africa_east + geographical_region = world_middle_east_persia + geographical_region = world_burma + geographical_region = world_india + } + # Then, if any of those apply, drill down. + OR = { + # Either coastal. + is_coastal = yes + is_riverside_province = yes + # Or has a suitable terrain. + terrain = oasis + terrain = jungle + terrain = wetlands + terrain = floodplains + terrain = farmlands + } + } +} diff --git a/common/scripted_triggers/00_statecraft_lifestyle_triggers.txt b/common/scripted_triggers/00_statecraft_lifestyle_triggers.txt new file mode 100644 index 00000000..09e304a4 --- /dev/null +++ b/common/scripted_triggers/00_statecraft_lifestyle_triggers.txt @@ -0,0 +1,11 @@ + +respected_liege_0002_bad_traits_trigger = { + OR = { + has_trait = arbitrary + has_trait = shy + has_trait = greedy + has_trait = sadistic + has_trait = callous + } +} + diff --git a/common/scripted_triggers/00_stress_triggers.txt b/common/scripted_triggers/00_stress_triggers.txt new file mode 100644 index 00000000..5170abdb --- /dev/null +++ b/common/scripted_triggers/00_stress_triggers.txt @@ -0,0 +1,321 @@ + +# This trigger is used when offering the player a choice between two stress outlets for a stress threshold event. +# The stress threshold event will add character flags from this list, based on a character's personality and relevance to the event, until two have been selected. +has_two_stress_threshold_options = { + calc_true_if = { + amount >= 2 + + has_character_flag = stress_threshold_option_drunkard + has_character_flag = stress_threshold_option_hashishiyah + has_character_flag = stress_threshold_option_rakish + has_character_flag = stress_threshold_option_reclusive + has_character_flag = stress_threshold_option_irritable + has_character_flag = stress_threshold_option_flagellant + has_character_flag = stress_threshold_option_profligate + has_character_flag = stress_threshold_option_improvident + has_character_flag = stress_threshold_option_contrite + has_character_flag = stress_threshold_option_comfort_eater + has_character_flag = stress_threshold_option_inappetetic + has_character_flag = stress_threshold_option_journaller + has_character_flag = stress_threshold_option_confider + has_character_flag = stress_threshold_option_athletic + has_character_flag = stress_threshold_option_conversion + has_character_flag = stress_threshold_option_depression + } +} + +# Check if the player already has two stress coping traits ( we don't want to give any more than that! ) +has_two_stress_coping_traits_trigger = { + calc_true_if = { + amount >= 2 + has_trait = drunkard + has_trait = hashishiyah + has_trait = rakish + has_trait = reclusive + has_trait = irritable + has_trait = flagellant + has_trait = profligate + has_trait = improvident + has_trait = contrite + has_trait = comfort_eater + has_trait = inappetetic + has_trait = journaller + has_trait = confider + has_trait = athletic + } +} + +has_a_stress_coping_trait_trigger = { + OR = { + has_trait = drunkard + has_trait = hashishiyah + has_trait = rakish + has_trait = reclusive + has_trait = irritable + has_trait = flagellant + has_trait = profligate + has_trait = improvident + has_trait = contrite + has_trait = comfort_eater + has_trait = inappetetic + has_trait = journaller + has_trait = confider + has_trait = athletic + } +} + +has_a_bad_stress_coping_trait_trigger = { + OR = { + has_trait = drunkard + has_trait = hashishiyah + has_trait = rakish + has_trait = irritable + has_trait = flagellant + has_trait = profligate + has_trait = contrite + has_trait = comfort_eater + has_trait = inappetetic + } +} + +can_be_drunkard = { + is_adult = yes + NOR = { # Cannot be Temperate or already have a Substance Abuse trait. + has_trait = drunkard + has_trait = hashishiyah + has_trait = temperate + } + faith = { # Cannot be Muslim ( some Muslims did actually drink, but ideally we want Muslims to be Hashishiyahs instead of Drunkards because it is more thematic). + NOT = { + religion_tag = islam_religion + } + } +} + +can_be_hashishiyah = { + is_adult = yes + NOR = { # Cannot be Temperate or already have a Substance Abuse trait. + has_trait = drunkard + has_trait = hashishiyah + has_trait = temperate + } + + OR = { + # Muslims always have access to Hashish... + faith = { + religion_tag = islam_religion + } + # Otherwise you must not be located in Europe (where Hashish was relatively unknown until modern times.) + AND = { + OR = { + AND = { + exists = capital_province + capital_province = { + save_temporary_scope_as = my_home_province + } + } + AND = { + exists = liege + exists = liege.capital_province + liege = { + capital_province = { + save_temporary_scope_as = my_home_province + } + } + } + } + scope:my_home_province = { + NOT = { + geographical_region = world_europe + } + } + } + } +} + +can_be_rakish = { # Must have a fitting personality or lifestyle + is_adult = yes + NOR = { + has_trait = rakish + has_sexuality = asexual + has_trait = celibate + has_trait = chaste + } + OR = { + has_trait = lustful + has_trait = arrogant + has_trait = deceitful + has_trait = gallant + has_trait = seducer + } +} + +can_be_reclusive = { # Must have a fitting personality or lifestyle + NOT = { has_trait = reclusive } + OR = { + has_trait = shy + has_trait = lazy + has_trait = paranoid + has_trait = craven + has_trait = cynical + has_trait = just # Does this make sense here? + } +} + +can_be_irritable = { # Must have a fitting personality or lifestyle + NOT = { has_trait = irritable } + OR = { + has_trait = wrathful + has_trait = impatient + has_trait = arrogant + has_trait = stubborn + has_trait = vengeful + has_trait = callous + } +} + +can_be_flagellant = { # Must have a fitting personality or lifestyle + NOT = { has_trait = flagellant } + OR = { + has_trait = zealous + has_trait = chaste + has_trait = temperate + has_trait = humble + has_trait = lifestyle_mystic + } +} + +can_be_profligate = { # Must have a fitting personality or lifestyle + NOT = { has_trait = profligate } + OR = { + has_trait = greedy + has_trait = ambitious + has_trait = arbitrary + has_trait = gregarious + has_trait = cynical + } +} + +can_be_improvident = { # Must have a fitting personality or lifestyle + NOT = { has_trait = improvident } + OR = { + has_trait = generous + has_trait = forgiving + has_trait = compassionate + has_trait = just + has_trait = content + } +} + +can_be_contrite = { + NOT = { has_trait = contrite } + OR = { # Must have a fitting personality or lifestyle + has_trait = deceitful + has_trait = schemer + has_trait = honest + has_trait = trusting + has_trait = humble + } + OR = { # Must have something to feel guilty about / confess to. + num_sinful_traits >= 1 + any_secret = { + exists = this + can_be_exposed_by = root + } + } +} + +can_be_comfort_eater = { # Must have a fitting personality. + NOR = { + has_trait = comfort_eater + has_trait = inappetetic + has_trait = temperate + } + OR = { + has_trait = gluttonous + has_trait = fickle + has_trait = arbitrary + has_trait = impatient + has_trait = calm + } +} + +can_be_inappetetic = { # Must have a fitting personality. + NOR = { + has_trait = comfort_eater + has_trait = inappetetic + has_trait = gluttonous + } + OR = { + has_trait = temperate + has_trait = content + has_trait = arbitrary + has_trait = patient + has_trait = diligent + } +} + +can_be_journaller = { # Must be a learned character with the scholarship lifestyle. + NOT = { has_trait = journaller } + learning >= high_skill_rating + OR = { + has_trait = scholar + has_trait = theologian + } +} + +can_be_confider = { # Must have a close friend they can confide in (and be willing to confide in!) + NOR = { + has_trait = confider + has_trait = shy + has_trait = arrogant + has_trait = paranoid + } + any_relation = { + type = friend + is_available_ai_adult = yes + } +} + +can_be_athletic = { # Must be willing and interested in getting out and exercising. + has_traits_that_negate_athletic_trigger = no #Are we already athletic or does any of our traits contradict athletic? + OR = { + has_trait = brave + has_trait = diligent + } +} + + +can_do_lustful_stress_conversion = { + is_ai = no # AI picks this way too often and makes the map predominantly Paulician/Orthodox/Karite + is_adult = yes + + # So you don't end up with Sapmi or African pagans or Indian kings going "Yeah let's worship Jesus now!" and everyone else goes "Who is Jesus?" + religion = { is_in_family = rf_abrahamic } + + # So the Caliph doesn't just convert after a bad day + NOT = { this = faith.religious_head } +} + +can_inflict_torture = { + OR = { + has_trait = sadistic + has_trait = vengeful + has_trait = torturer + has_trait = lifestyle_hunter + has_trait = lifestyle_blademaster + } +} + +can_be_eccentric = { + NOR = { + has_trait = fickle + has_trait = stubborn + has_trait = eccentric + } +} + +has_witnessed_stress_coping_trait = { + NOT = { has_trait = $TRAIT$ } + var:witnessed_trait ?= flag:$TRAIT$ +} \ No newline at end of file diff --git a/common/scripted_triggers/00_succession_triggers.txt b/common/scripted_triggers/00_succession_triggers.txt index 4cbd75c9..467f7370 100644 --- a/common/scripted_triggers/00_succession_triggers.txt +++ b/common/scripted_triggers/00_succession_triggers.txt @@ -34,13 +34,14 @@ historical_succession_access_single_heir_succession_law_trigger = { target = flag:flag_reformed_carolingian_empire } } + has_title = title:e_hindustan #Add any subsequent exceptions here. } - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } } historical_succession_access_single_heir_succession_law_youngest_trigger = { - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } OR = { #has_title = title:e_byzantium #Add any subsequent exceptions here. @@ -48,7 +49,7 @@ historical_succession_access_single_heir_succession_law_youngest_trigger = { } historical_succession_access_single_heir_dynasty_house_trigger = { - NOT = { has_government = administrative_government } + NOT = { government_has_flag = government_is_administrative } AND = { has_title = title:d_bohemia culture = { has_innovation = innovation_table_of_princes } diff --git a/common/scripted_triggers/00_task_contract_triggers.txt b/common/scripted_triggers/00_task_contract_triggers.txt new file mode 100644 index 00000000..354a3fb0 --- /dev/null +++ b/common/scripted_triggers/00_task_contract_triggers.txt @@ -0,0 +1,268 @@ + +#This should list _ALL_ laamp_contracts_criminal_group-contracts +can_create_criminal_contract_trigger = { + $LAAMP$ = { + OR = { + can_create_task_contract = { + type_name = laamp_base_0041 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_1041 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_5031 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_5051 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_2041 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_3011 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_3031 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_3041 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_4041 + employer = $EMPLOYER$ + } + } + } +} + +#This should list _ALL_ laamp_contracts_diplomacy_group-contracts +can_create_diplomacy_contract_trigger = { + $LAAMP$ = { + OR = { + can_create_task_contract = { + type_name = laamp_base_0001 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_0011 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_0021 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_0031 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_cultural_minority_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_religious_minority_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_boost_legitimacy_contract + employer = $EMPLOYER$ + } + } + } +} + +#This should list _ALL_ laamp_contracts_hireling_group-contracts. Martial are also stashed here. +can_create_hireling_contract_trigger = { + $LAAMP$ = { + OR = { + can_create_task_contract = { + type_name = laamp_base_1011 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_2001 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_help_train_commanders_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_rid_councillor_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_gain_wanderer_contract + employer = $EMPLOYER$ + } + } + } +} + +#This should list _ALL_ laamp_contracts_justicar_group-contracts +can_create_justicar_contract_trigger = { + $LAAMP$ = { + OR = { + can_create_task_contract = { + type_name = laamp_base_6001 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_6011 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_6021 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_6031 + employer = $EMPLOYER$ + } + } + } +} + +#This should list _ALL_ laamp_contracts_learning_group-contracts +can_create_learning_contract_trigger = { + $LAAMP$ = { + OR = { + can_create_task_contract = { + type_name = laamp_base_4001 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_4011 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_4021 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_4031 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_4100 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_help_faith_conversion_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_fight_faith_conversion_contract + employer = $EMPLOYER$ + } + } + } +} + +#This should list _ALL_ laamp_contracts_intrigue_group-contracts +can_create_intrigue_contract_trigger = { + $LAAMP$ = { + OR = { + can_create_task_contract = { + type_name = laamp_base_3001 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_prison_break_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_help_find_secrets_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_help_fabricate_claim_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_help_increase_control_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_find_secret_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_eliminate_heir_contract + employer = $EMPLOYER$ + } + } + } +} + +#This should list _ALL_ laamp_contracts_stewardship_group-contracts +can_create_stewardship_contract_trigger = { + $LAAMP$ = { + OR = { + can_create_task_contract = { + type_name = laamp_base_2011 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_2021 + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_base_2031 + employer = $EMPLOYER$ + } + } + } +} + +#This should list _ALL_ laamp_contracts_transport_group-contracts +can_create_transport_contract_trigger = { + $LAAMP$ = { + OR = { + can_create_task_contract = { + type_name = laamp_construction_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_treasure_hunting_contract + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_transport_vip + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_transport_artifact + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_transport_gold + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_transport_ward + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_transport_explorer + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_transport_animal + employer = $EMPLOYER$ + } + can_create_task_contract = { + type_name = laamp_transport_explorer + employer = $EMPLOYER$ + } + } + } +} \ No newline at end of file diff --git a/common/scripted_triggers/00_terrain_triggers.txt b/common/scripted_triggers/00_terrain_triggers.txt new file mode 100644 index 00000000..2e0e70cf --- /dev/null +++ b/common/scripted_triggers/00_terrain_triggers.txt @@ -0,0 +1,87 @@ + +######################### +# Triggers for Province Terrain +######################### +is_wooded_trigger = { + OR = { + terrain = forest + terrain = jungle + terrain = taiga + } +} + +is_mountainous_trigger = { + OR = { + terrain = mountains + terrain = desert_mountains + } +} + +is_mountainous_or_hilly_trigger = { + OR = { + terrain = mountains + terrain = desert_mountains + terrain = hills + } +} + +is_drylands_trigger = { + OR = { + terrain = drylands + terrain = steppe + } +} + +is_desert_trigger = { + OR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + } +} + +is_drylands_or_desert_trigger = { + OR = { + terrain = drylands + terrain = steppe + terrain = desert + terrain = desert_mountains + terrain = oasis + } +} + +is_wetland_trigger = { + OR = { + terrain = wetlands + terrain = floodplains + terrain = oasis + } +} + +is_flatlands_trigger = { + OR = { + terrain = steppe + terrain = plains + terrain = farmlands + } +} + +is_likely_to_contain_trees_trigger = { + OR = { + is_wooded_trigger = yes + is_wetland_trigger = yes + is_flatlands_trigger = yes + terrain = hills + } +} + +holds_county_with_water_trigger = { + any_held_county = { + any_county_province = { + NOR = { + terrain = desert + terrain = desert_mountains + } + } + } +} diff --git a/common/scripted_triggers/00_title_triggers.txt b/common/scripted_triggers/00_title_triggers.txt new file mode 100644 index 00000000..af46d602 --- /dev/null +++ b/common/scripted_triggers/00_title_triggers.txt @@ -0,0 +1,159 @@ + +######################### +# Triggers for Titles +######################### + +# has_mythical_founder_trigger - Does the title have a mythical or semi-mythical founder? + + +has_mythical_founder_trigger = { + OR = { + AND = { # Charles Martell (?) + OR = { + this = title:k_france + this = title:e_france + } + current_date > 1000.1.1 + } + OR = { # Alexander + this = title:k_thessalonika + this = title:k_hellas + this = title:k_egypt + AND = { + OR = { + this = title:k_persia + this = title:e_persia + } + NOR = { + root.faith.religion = religion:islam_religion + root.faith.religion = religion:zoroastrianism_religion + } + } + this = title:k_anatolia + } + this = title:k_poland # Lech + this = title:k_bohemia # Czech + OR = { # Rus + this = title:k_white_rus + this = title:k_ruthenia + this = title:e_russia + } + OR = { # Arthur + this = title:k_england + this = title:e_britannia + } + AND = { + OR = { # Belisarius + this = title:k_italy + this = title:k_romagna + this = title:k_sardinia + this = title:k_naples + this = title:e_italy + } + root.faith = faith:orthodox + } + OR = { # Romulus + this = title:k_italy + this = title:k_romagna + this = title:k_sardinia + this = title:e_italy + this = title:e_roman_empire + } + OR = { # Ardashir + this = title:k_persia + this = title:e_persia + } + AND = { # Pharaohs + this = title:k_egypt + NOT = { root.faith.religion = religion:islam_religion } + } + AND = { # Visigothic Kings + OR = { + this = title:k_castille + this = title:k_aragon + this = title:k_navarra + this = title:k_andalusia + this = title:k_portugal + this = title:e_spain + } + NOT = { root.faith.religion = religion:islam_religion } + } + AND = { # Abd al-Rahman + OR = { + this = title:k_castille + this = title:k_aragon + this = title:k_navarra + this = title:k_andalusia + this = title:k_portugal + this = title:e_spain + } + root.faith.religion = religion:islam_religion + } + AND = { # Zenobia + OR = { + this = title:k_syria + this = title:k_mesopotamia + } + NOT = { root.faith.religion = religion:islam_religion } + } + } +} + +has_too_many_held_duchies_trigger = { + highest_held_title_tier >= tier_kingdom + any_held_title = { + count >= 3 + title_counts_towards_too_many_duchies_trigger = yes + } +} + +title_counts_towards_too_many_duchies_trigger = { + tier = tier_duchy + is_titular = no +} + +# this = title +# VASSAL = Vassal to check tier against +# LIEGE = Liege of vassal +title_lost_from_realm_on_foreign_ruler_succession_trigger = { + tier > $VASSAL$.highest_held_title_tier + exists = holder # Ignoring titles that will be created by confederate partition, cause that be magic and unlikely to make a warning anyway + holder = { + NOR = { + this = $LIEGE$ + target_is_liege_or_above = $LIEGE$ + government_has_flag = government_is_administrative # Ignoring because admin counts do not take it with them, but immediately resign it when they inherit a governorship + } + } +} + +# Would this character ever be travelling outside of their palace walls at random for the purposes of events? +## We don't care about personality, only whether it'd be immersion breaking in principle to run into this person at random/to have an event trigger where you are randomly wandering. +character_title_allows_off_screen_wandering_trigger = { + NOR = { + # No administrative or clan emperors. + AND = { + highest_held_title_tier >= tier_empire + OR = { + government_has_flag = government_is_administrative + government_has_flag = government_is_clan + } + } + # No administrative kings. + AND = { + highest_held_title_tier = tier_kingdom + government_has_flag = government_is_administrative + } + # No religious heads. + faith.religious_head ?= this + } +} + +county_held_or_vassal_to_target_trigger = { + holder ?= { + OR = { + this = $TARGET$ + target_is_liege_or_above = $TARGET$ + } + } +} diff --git a/common/scripted_triggers/00_travel_triggers.txt b/common/scripted_triggers/00_travel_triggers.txt new file mode 100644 index 00000000..40c6d7fc --- /dev/null +++ b/common/scripted_triggers/00_travel_triggers.txt @@ -0,0 +1,256 @@ +is_location_valid_for_travel_event_on_land = { + location = { + exists = county #This will exclude sea provinces, impassable provinces, river provinces, etc + } +} + +is_guard_type_character_trigger = { + OR = { + has_court_position = bodyguard_court_position + has_court_position = akolouthos_court_position + is_knight_of = root + has_council_position = councillor_marshal + save_temporary_scope_as = guard_check + AND = { + root.current_travel_plan = { + scope:guard_check = { is_travel_entourage_character = yes } + } + is_available_travelling_adult = yes + is_healthy = yes + prowess > low_skill_rating + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } +} + +is_character_not_specialized_in_terrain = { #Used in character scope + save_temporary_scope_as = character_in_terrain + is_location_valid_for_travel_event_on_land = yes + location = { #Is it reasonable for us to get lost, etc in this type of terrain? + switch = { + trigger = terrain + jungle = { + scope:character_in_terrain = { + NOT = { has_trait = jungle_stalker } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = jungle_stalker } + } + } + } + desert = { + scope:character_in_terrain = { + NOT = { has_trait = desert_warrior } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = desert_warrior } + } + } + } + drylands = { + scope:character_in_terrain = { + NOT = { has_trait = desert_warrior } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = desert_warrior } + } + } + } + desert_mountains = { + scope:character_in_terrain = { + NOT = { has_trait = desert_warrior } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = desert_warrior } + } + } + } + oasis = { + scope:character_in_terrain = { + NOT = { has_trait = desert_warrior } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = desert_warrior } + } + } + } + mountains = { + scope:character_in_terrain = { + NOT = { has_trait = desert_warrior } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = desert_warrior } + } + } + } + wetlands = { + scope:character_in_terrain = { + NOT = { has_trait = desert_warrior } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = desert_warrior } + } + } + } + hills = { + scope:character_in_terrain = { + NOT = { has_trait = desert_warrior } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = desert_warrior } + } + } + } + farmlands = { + scope:character_in_terrain = { + NOT = { has_trait = open_terrain_expert } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = open_terrain_expert } + } + } + } + plains = { + scope:character_in_terrain = { + NOT = { has_trait = open_terrain_expert } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = open_terrain_expert } + } + } + } + steppe = { + scope:character_in_terrain = { + NOT = { has_trait = open_terrain_expert } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = open_terrain_expert } + } + } + } + forest = { + scope:character_in_terrain = { + NOT = { has_trait = forest_fighter } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = forest_fighter } + } + } + } + taiga = { + scope:character_in_terrain = { + NOT = { has_trait = forest_fighter } + current_travel_plan.travel_leader ?= { + NOT = { has_trait = forest_fighter } + } + } + } + } + } +} + +has_sea_danger_type = { + is_sea_province = yes + OR = { + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = sea + } + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = coastal_sea + } + } +} + +has_terrain_danger_type = { + OR = { + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = hills + } + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = forest + } + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = mountains + } + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = desert_mountains + } + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = wetlands + } + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = floodplains + } + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = drylands + } + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = desert + } + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = jungle + } + travel_danger_type = { + travel_plan = $TRAVEL$ + terrain = steppe + } + } +} + +is_nomadic_location_trigger = { + geographical_region = world_steppe + culture = { + OR = { + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_ugro_permian + } + } +} + +is_snowy_rural_scandinavia_location_trigger = { + location = { + OR = { + has_holding = no + has_holding_type = tribal_holding + } + geographical_region = world_europe_north + } + location_has_winter_trigger = yes +} + +### EP2 BACKGROUND TRIGGERS + +# Checks that a character is traveling to or from an activity and is not currently participating in an activity +is_travelling_not_at_activity = { + is_travelling = yes + trigger_if = { + limit = { exists = involved_activity } + has_activity_state = travel + } +} + +# Checks that a character is traveling, but currently at an activity and not actually moving around the map +is_travelling_at_activity = { + is_travelling = yes + trigger_if = { + limit = { exists = involved_activity } + NOT = { has_activity_state = travel } + } +} + +#update this if a new travel point of interest is added to the game, although currently it's only used in 1 laamp task contract +has_any_travel_poi_trigger = { + OR = { + has_travel_point_of_interest = poi_capitals + has_travel_point_of_interest = poi_special_buildings_martial + has_travel_point_of_interest = poi_special_buildings_learning + has_travel_point_of_interest = poi_special_buildings_religious + has_travel_point_of_interest = poi_special_buildings_diplomatic + has_travel_point_of_interest = poi_grand_city + has_travel_point_of_interest = poi_special_buildings_wonder + has_travel_point_of_interest = poi_special_buildings_economic + has_travel_point_of_interest = poi_mausoleum_at_halicarnassus + has_travel_point_of_interest = poi_lighthouse_of_alexandria + has_travel_point_of_interest = poi_natural_feature + } +} \ No newline at end of file diff --git a/common/scripted_triggers/00_tutorial_triggers.txt b/common/scripted_triggers/00_tutorial_triggers.txt new file mode 100644 index 00000000..5cc05770 --- /dev/null +++ b/common/scripted_triggers/00_tutorial_triggers.txt @@ -0,0 +1,16 @@ +should_show_tutorial_alert = { + OR= { + can_start_tutorial_lesson = $LESSON$ + is_tutorial_lesson_active = $LESSON$ + } +} + +valid_raid_target_trigger = { + NOR = { + has_raid_immunity_against = root + is_allied_to = root + has_truce = root + target_is_vassal_or_below = root + top_liege = root.top_liege + } +} diff --git a/common/scripted_triggers/00_vassal_stance_triggers.txt b/common/scripted_triggers/00_vassal_stance_triggers.txt index fd18afa4..15d38bd3 100644 --- a/common/scripted_triggers/00_vassal_stance_triggers.txt +++ b/common/scripted_triggers/00_vassal_stance_triggers.txt @@ -19,6 +19,7 @@ has_same_vassal_stance_as_trigger = { zealot = { scope:vassal_temp = { has_vassal_stance = zealot } } minority = { scope:vassal_temp = { has_vassal_stance = minority } } barons_and_minor_landholders = { scope:vassal_temp = { has_vassal_stance = barons_and_minor_landholders } } + belligerent = { scope:vassal_temp = { has_vassal_stance = belligerent } } } } } @@ -38,7 +39,7 @@ vassal_follows_directive_valid_trigger = { scope:directive_vassal = { trigger_if = { limit = { - scope:directive_liege = { has_government = administrative_government } + scope:directive_liege = { government_has_flag = government_is_administrative } } is_vassal_of = scope:directive_liege } @@ -62,7 +63,7 @@ vassal_follows_directive_trigger = { } custom_tooltip = { text = has_admin_gov - has_government = administrative_government + government_has_flag = government_is_administrative } } opinion = { diff --git a/common/scripted_triggers/00_war_and_peace_triggers.txt b/common/scripted_triggers/00_war_and_peace_triggers.txt index 95d698e4..0d8c34ce 100644 --- a/common/scripted_triggers/00_war_and_peace_triggers.txt +++ b/common/scripted_triggers/00_war_and_peace_triggers.txt @@ -107,7 +107,7 @@ joiner_not_already_in_another_war_with_any_target_war_participants_trigger = { subject = $JOINER$ NOT = { any_war_enemy = { - OR = { + OR = { AND = { scope:target = { primary_defender = $WARRIOR$ } is_defender_in_war = scope:target @@ -170,8 +170,18 @@ can_potentially_call_ally_trigger = { $JOINER$ = { trigger_if = { limit = { - # Diarchs can join against other vassals. - NOT = { this ?= $WARRIOR$.diarch } + NOT = { + # Diarchs can join against other vassals. + this ?= $WARRIOR$.diarch + # Confederation members can join the confederation leader's defensive wars + AND = { + is_confederation_member = yes + $WARRIOR$ = { + is_member_of_confederation = $JOINER$.confederation + } + } + } + } NOT = { target_is_liege_or_above = $WARRIOR$ @@ -180,12 +190,31 @@ can_potentially_call_ally_trigger = { } } - # Can never call your liege to your own wars (they protect you only from foreign invaders, by being the war target instead of you) + # Can never call your liege to your own wars (they protect you only from foreign invaders, by being the war target instead of you) -- Unless you have the Nomadic Contract Right custom_description = { text = cannot_call_liege_to_war $JOINER$ = { - NOT = { - target_is_vassal_or_below = $WARRIOR$ + trigger_if = { + limit = { + target_is_vassal_or_below = $WARRIOR$ + $WARRIOR$ = { + vassal_contract_has_flag = vassal_contract_liege_forced_war_override + } + } + always = yes + } + trigger_else_if = { + limit = { + $JOINER$ = { + NOT = { + target_is_vassal_or_below = $WARRIOR$ + } + } + } + always = yes + } + trigger_else = { + always = no } } } @@ -199,8 +228,8 @@ war_declarer_needs_hook_on_liege = { liege = scope:recipient.liege NOT = { liege = scope:recipient } NAND = { - has_government = administrative_government - liege = { has_government = administrative_government } + government_has_flag = government_is_administrative + liege = { government_has_flag = government_is_administrative } } liege = { has_realm_law_flag = vassal_internal_wars_banned } NOT = { @@ -214,8 +243,8 @@ war_declarer_needs_hook_on_liege = { is_independent_ruler = no NOT = { liege = scope:recipient } NAND = { - has_government = administrative_government - liege = { has_government = administrative_government } + government_has_flag = government_is_administrative + liege = { government_has_flag = government_is_administrative } } liege = { has_realm_law_flag = vassal_all_wars_banned } NOT = { @@ -244,6 +273,7 @@ can_use_conquest_cbs_trigger = { OR = { government_has_flag = government_is_tribal government_has_flag = government_is_clan + government_has_flag = government_is_nomadic faith = { has_doctrine_parameter = conquest_cb_enabled } culture = { has_cultural_parameter = can_use_conquest_cbs } } @@ -268,7 +298,7 @@ can_be_knight_trigger = { is_hostage = no trigger_if = { # Admin governors cannot be knights limit = { - $ARMY_OWNER$ = { has_government = administrative_government } + $ARMY_OWNER$ = { government_has_flag = government_is_administrative } is_courtier = no } primary_title ?= { @@ -463,6 +493,7 @@ using_conquest_cb_trigger = { using_cb = ducal_conquest_cb using_cb = ireland_laudabiliter_conquest_cb using_cb = mongol_invasion_war + using_cb = mpo_gok_onslaught_cb } } @@ -839,30 +870,91 @@ religious_war_vassals_constraints = { } } +herders_and_tributary_constraints = { + trigger_if = { + limit = { exists = scope:defender } + scope:defender = { + save_temporary_scope_as = recipient # done for is_a_herder_defender_tt + NOR = { + custom_tooltip = { + text = is_a_herder_defender_tt # herders can't fight + government_has_flag = government_is_herder + } + is_tributary_of_suzerain_or_above = scope:attacker # can't fight your tributaries or your tributaries' tributaries + } + # You cannot attack your Confederation buddies tributaries + trigger_if = { + limit = { + suzerain != this + scope:attacker = { is_confederation_member = yes } + suzerain = { is_confederation_member = yes } + } + NOT = { scope:attacker.confederation = suzerain.confederation } + } + } + scope:attacker = { # Tributaries cannot attack their Suzerain or Suzerain's Confederation buddies + NOR = { + is_tributary_of_suzerain_or_above = scope:defender # can't attack your own suzerain + trigger_if = { + limit = { + suzerain != this + scope:defender = { is_confederation_member = yes } + suzerain = { is_confederation_member = yes } + } + # if you have a suzerain who's part of a confederation, you may not attack any of its members + scope:defender.confederation = suzerain.confederation + } + } + } + } +} + feudal_clan_tribal_conquest_constraints = { OR = { AND = { tier = tier_county - any_county_province = { - has_holding_type = tribal_holding + title_province = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } } } AND = { tier > tier_county any_in_de_jure_hierarchy = { tier = tier_county - any_county_province = { - has_holding_type = tribal_holding + title_province = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } } } } } scope:attacker = { - NOT = { government_has_flag = government_is_tribal } + NOR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } gold < 200 - any_sub_realm_county = { - any_county_province = { - has_holding_type = tribal_holding + OR = { + AND = { + government_has_flag = government_is_administrative + gold < 700 + this != top_liege + } + any_sub_realm_county = { + title_province = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } } } } diff --git a/common/scripted_triggers/00_weather_triggers.txt b/common/scripted_triggers/00_weather_triggers.txt new file mode 100644 index 00000000..10cd151c --- /dev/null +++ b/common/scripted_triggers/00_weather_triggers.txt @@ -0,0 +1,465 @@ + +################################################## +# Winter Triggers +county_has_winter_trigger = { + title_province = { + has_winter_trigger = yes + } +} + +character_capital_has_winter_trigger = { + capital_county = { county_has_winter_trigger = yes } +} + +culture_uses_frequent_winter_transportation_trigger = { + culture = { + OR = { + has_cultural_pillar = heritage_balto_finnic + has_cultural_pillar = heritage_north_germanic + # We exclude Normans as being pretty distant from this part of their heritage. + has_cultural_parameter = winter_trait_bonuses + } + } +} + +location_has_harsh_winter_trigger = { + location = { has_province_modifier = winter_harsh_modifier } +} + +location_has_normal_or_worse_winter_trigger = { + location = { + OR = { + has_province_modifier = winter_normal_modifier + has_province_modifier = winter_harsh_modifier + } + } +} + +location_has_winter_trigger = { + location = { + has_winter_trigger = yes + } +} + +has_winter_trigger = { + OR = { + has_province_modifier = winter_mild_modifier + has_province_modifier = winter_normal_modifier + has_province_modifier = winter_harsh_modifier + root = { has_zud_season_in_county_trigger = { COUNTY = root.location.county } } + } +} + +has_winter_combat_trigger = { + OR = { + has_province_modifier = winter_mild_modifier + has_province_modifier = winter_normal_modifier + has_province_modifier = winter_harsh_modifier + } +} + +################################################## +# Seasonal Triggers + +middle_of_year_season_trigger = { + current_month >= 4 + current_month <= 9 +} + +end_of_year_season_trigger = { + OR = { + current_month >= 10 + current_month <= 3 + } +} + +temperate_seasons_trigger = { + $LOCATION$ = { + OR = { + geographical_region = world_europe + geographical_region = world_asia_minor + geographical_region = world_middle_east + geographical_region = world_india_rajastan + geographical_region = world_india_bengal + geographical_region = world_africa_north + geographical_region = world_steppe + geographical_region = world_tibet + } + } +} + +tropical_seasons_trigger = { + $LOCATION$ = { + tropical_seasons_region_trigger = yes + } +} + +tropical_seasons_region_trigger = { + OR = { + geographical_region = world_africa_west + geographical_region = world_africa_east + geographical_region = world_india_deccan + geographical_region = world_burma + } +} + +is_nice_season_to_be_outside_trigger = { + OR = { + # Temperate zones like to be out in summer. + AND = { + temperate_seasons_trigger = { LOCATION = $LOCATION$ } + middle_of_year_season_trigger = yes + } + # Tropical zones like to be out in winter. + AND = { + tropical_seasons_trigger = { LOCATION = $LOCATION$ } + end_of_year_season_trigger = yes + } + } +} + +is_nice_season_to_be_inside_trigger = { + OR = { + # Temperate zones like to be inside in winter. + AND = { + temperate_seasons_trigger = { LOCATION = $LOCATION$ } + end_of_year_season_trigger = yes + } + # Tropical zones like to be inside in summer. + AND = { + tropical_seasons_trigger = { LOCATION = $LOCATION$ } + middle_of_year_season_trigger = yes + } + } +} + + + +#Season scripted trigger tied into custom loc, can be used for backgrounds and VFX +#Format like current_season_winter = yes + +current_season_trigger = { + current_season_$SEASON$ = yes +} + +current_season_winter = { + #southern region with rainy/dry seasons + trigger_if = { + limit = { + location = { + geographical_region = seasonal_region_deccan + } + } + OR = { + current_month >= 11 + current_month < 3 + } + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_rajasthan + } + } + OR = { + current_month >= 12 + current_month < 4 + } + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_bengal + } + } + OR = { + current_month >= 11 + current_month < 2 + } + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_burma + } + } + OR = { + current_month >= 11 + current_month < 3 + } + } + trigger_else = { + #Generic Northern Hemisphere + OR = { + current_month >= 12 + current_month < 3 + } + #Not present/has different name in these regions + location = { + NOR = { + geographical_region = seasonal_region_east_africa + geographical_region = seasonal_region_west_africa + } + } + } +} + +current_season_autumn = { + #southern region with rainy/dry seasons + trigger_if = { + limit = { + location = { + geographical_region = seasonal_region_rajasthan + } + } + current_month >= 10 + current_month < 12 + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_bengal + } + } + current_month >= 8 + current_month < 11 + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_east_africa + } + } + current_month >= 9 + current_month < 11 + } + trigger_else = { + #Generic Northern Hemisphere + current_month >= 9 + current_month < 12 + #Not present/has different name in these regions + location = { + NOR = { + geographical_region = seasonal_region_west_africa + geographical_region = seasonal_region_deccan + geographical_region = seasonal_region_burma + } + } + } +} + +current_season_summer = { + #southern region with rainy/dry seasons + trigger_if = { + limit = { + location = { + geographical_region = seasonal_region_deccan + } + } + current_month >= 3 + current_month < 6 + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_rajasthan + } + } + current_month >= 4 + current_month < 7 + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_bengal + } + } + current_month >= 4 + current_month < 6 + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_burma + } + } + current_month >= 3 + current_month < 5 + } + trigger_else = { + #Generic Northern Hemisphere + current_month >= 6 + current_month < 9 + #Not present/has different name in these regions + location = { + NOR = { + geographical_region = seasonal_region_west_africa + geographical_region = seasonal_region_east_africa + } + } + } +} + +current_season_spring = { + #southern region with rainy/dry seasons + trigger_if = { + limit = { + location = { + geographical_region = seasonal_region_bengal + } + } + current_month >= 2 + current_month < 4 + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_east_africa + } + } + current_month >= 3 + current_month < 6 + } + trigger_else = { + #Generic Northern Hemisphere + current_month >= 3 + current_month < 6 + #Not present/has different name in these regions + location = { + NOR = { + geographical_region = seasonal_region_west_africa + geographical_region = seasonal_region_rajasthan + geographical_region = seasonal_region_deccan + geographical_region = seasonal_region_burma + } + } + } +} + +current_season_dry_season = { + #southern region with rainy/dry seasons + location = { + OR = { + geographical_region = seasonal_region_west_africa + geographical_region = seasonal_region_east_africa + } + } + trigger_if = { + limit = { + location = { geographical_region = seasonal_region_west_africa } + } + OR = { + current_month >= 11 + current_month < 5 + } + } + trigger_else = { + location = { + geographical_region = seasonal_region_east_africa + } + OR = { + current_month >= 12 + current_month < 3 + } + } +} + +current_season_rainy_season = { + #Jasons triggers here + location = { + OR = { + geographical_region = seasonal_region_deccan + geographical_region = seasonal_region_rajasthan + geographical_region = seasonal_region_bengal + geographical_region = seasonal_region_burma + geographical_region = seasonal_region_west_africa + geographical_region = seasonal_region_east_africa + } + } + #southern region with rainy/dry seasons + trigger_if = { + limit = { + location = { + geographical_region = seasonal_region_deccan + } + } + current_month >= 6 + current_month < 11 + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_rajasthan + } + } + current_month >= 7 + current_month < 10 + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_bengal + } + } + current_month >= 6 + current_month < 8 + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_burma + } + } + current_month >= 5 + current_month < 11 + } + trigger_else_if = { + limit = { + location = { + geographical_region = seasonal_region_west_africa + } + } + current_month >= 5 + current_month < 11 + } + trigger_else = { + location = { + geographical_region = seasonal_region_east_africa + } + current_month >= 6 + current_month < 9 + } +} + +current_season_hot_season = { + OR = { + AND = { + location = { + OR = { + geographical_region = seasonal_region_east_africa + geographical_region = seasonal_region_west_africa + } + } + current_season_rainy_season = yes + } + current_season_summer = yes + } +} +current_season_cold_season = { + OR = { + current_season_winter = yes + current_season_dry_season = yes + } +} +current_season_wet = { + OR = { + current_season_spring = yes + current_season_rainy_season = yes + } +} +current_season_dry = { + OR = { + current_season_summer = yes + current_season_dry_season = yes + } +} diff --git a/common/scripted_triggers/00_witch_triggers.txt b/common/scripted_triggers/00_witch_triggers.txt new file mode 100644 index 00000000..8fc597cb --- /dev/null +++ b/common/scripted_triggers/00_witch_triggers.txt @@ -0,0 +1,24 @@ +use_convert_to_witchcraft_secrecy_trigger = { + $OWNER$ = { + any_secret = { secret_type = secret_witch } + save_temporary_scope_as = witchract_secrecy_check + trait_is_shunned_or_criminal_in_my_or_lieges_faith_trigger = { TRAIT = witch GENDER_CHARACTER = scope:witchract_secrecy_check } + } +} + +knows_about_character_being_witch_trigger = { + OR = { + $CHARACTER$ = { has_trait = witch } + any_known_secret = { + secret_owner = $CHARACTER$ + secret_type = secret_witch + } + } +} + +potential_witch_friend_trigger = { + faith = $CHARACTER$.faith + knows_about_character_being_witch_trigger = { CHARACTER = $CHARACTER$ } + save_temporary_scope_as = trigger_witch_friend + $CHARACTER$ = { knows_about_character_being_witch_trigger = { CHARACTER = scope:trigger_witch_friend } } +} diff --git a/common/scripted_triggers/01_bp1_filippa_scripted_triggers.txt b/common/scripted_triggers/01_bp1_filippa_scripted_triggers.txt new file mode 100644 index 00000000..32f1cc5f --- /dev/null +++ b/common/scripted_triggers/01_bp1_filippa_scripted_triggers.txt @@ -0,0 +1,41 @@ + +has_weak_hook_on_trigger = { + OR = { + has_hook_of_type = { + target = $TARGET_CHARACTER$ + type = weak_blackmail_hook + } + has_hook_of_type = { + target = $TARGET_CHARACTER$ + type = favor_hook + } + has_hook_of_type = { + target = $TARGET_CHARACTER$ + type = obligation_hook + } + has_hook_of_type = { + target = $TARGET_CHARACTER$ + type = indebted_hook + } + has_hook_of_type = { + target = $TARGET_CHARACTER$ + type = threat_hook + } + has_hook_of_type = { + target = $TARGET_CHARACTER$ + type = manipulation_hook + } + has_hook_of_type = { + target = $TARGET_CHARACTER$ + type = house_head_hook + } + has_hook_of_type = { + target = $TARGET_CHARACTER$ + type = trial_by_combat_hook + } + has_hook_of_type = { + target = $TARGET_CHARACTER$ + type = sumptuary_crime_hook + } + } +} \ No newline at end of file diff --git a/common/scripted_triggers/01_building_upgrade_triggers.txt b/common/scripted_triggers/01_building_upgrade_triggers.txt new file mode 100644 index 00000000..184ae4d8 --- /dev/null +++ b/common/scripted_triggers/01_building_upgrade_triggers.txt @@ -0,0 +1,26 @@ +has_existing_farming_building_trigger = { + trigger_if = { + limit = { building_farm_estates_requirement_terrain = yes } + OR = { + has_building = farm_estates_01 + has_building = farm_estates_02 + has_building = farm_estates_03 + has_building = farm_estates_04 + has_building = farm_estates_05 + has_building = farm_estates_06 + has_building = farm_estates_07 + } + } + trigger_if = { + limit = { building_farm_estates_requirement_terrain = yes } + OR = { + has_building = pastures_01 + has_building = pastures_02 + has_building = pastures_03 + has_building = pastures_04 + has_building = pastures_05 + has_building = pastures_06 + has_building = pastures_07 + } + } +} diff --git a/common/scripted_triggers/01_fp1_scripted_triggers.txt b/common/scripted_triggers/01_fp1_scripted_triggers.txt new file mode 100644 index 00000000..5309af13 --- /dev/null +++ b/common/scripted_triggers/01_fp1_scripted_triggers.txt @@ -0,0 +1,360 @@ + +################################################## +# General Triggers + +eligible_for_fp1_dynasty_legacies_trigger = { + has_fp1_dlc_trigger = yes + OR = { + # Technically, we could hardscript this to North Germanics/Normans/Estonians, but eh. + culture = { has_innovation = innovation_longboats } + # Converts should also get a chance to get in on the fun. + religion = religion:germanic_religion + } +} + +fp1_can_raise_stele_trigger = { + OR = { + culture = { has_cultural_parameter = has_access_to_runestones } + has_character_modifier = embraced_local_traditions_modifier + } + culture = { + NOT = { has_cultural_era_or_later = culture_era_high_medieval } + } +} + +fp1_can_raise_stele_title_scope_trigger = { + culture = { + has_cultural_pillar = heritage_north_germanic + NOT = { has_cultural_era_or_later = culture_era_high_medieval } + } +} + +fp1_county_has_stele_trigger = { + OR = { + has_county_modifier = fp1_stele_ancestors_strong + has_county_modifier = fp1_stele_ancestors_weak + has_county_modifier = fp1_stele_conquest_strong + has_county_modifier = fp1_stele_conquest_weak + has_county_modifier = fp1_stele_promotion_strong + has_county_modifier = fp1_stele_promotion_weak + } +} + +fp1_eligible_for_yearly_events_trigger = { + has_fp1_dlc_trigger = yes + OR = { + culture = { has_cultural_pillar = heritage_north_germanic } + religion = religion:germanic_religion + } +} + +################################################## +# Cultural & Regional Triggers + +fp1_is_norse = { + OR = { + culture = { has_cultural_pillar = heritage_north_germanic } + culture = culture:norman + } +} + +fp1_is_norse_tribal = { + fp1_is_norse = yes + government_has_flag = government_is_tribal +} + +fp1_is_coastal_norse_tribal = { + # Standard checks. + fp1_is_norse_tribal = yes + # Do you have a relevant coastal county somewhere? + any_sub_realm_county = { is_coastal_county = yes } +} + +fp1_is_in_scandinavia = { + capital_county.title_province = { geographical_region = world_europe_north } +} + +fp1_is_in_scandinavian_colonies = { + capital_county.title_province = { + OR = { + geographical_region = world_europe_west_britannia + geographical_region = dlc_fp1_region_colonial_eastern_europe + } + } +} + +fp1_is_in_scandinavia_or_colonies = { + OR = { + fp1_is_in_scandinavia = yes + fp1_is_in_scandinavian_colonies = yes + } +} + +fp1_remove_stele_new_holder_trigger = { + # Is there a rogue stone around? + $TITLE$ = { exists = var:stele_commissioner } + # And would the new holder want to tear down the stele? + $NEW_HOLDER$ = { + OR = { + AND = { + exists = dynasty + # E.g., because they're a different family and won't maintain it. + NOT = { dynasty = $PREVIOUS_HOLDER$.dynasty } + } + # Or because they're a subject of the runestone, which means it's memorialising their defeat. + ## ... Unless they're a ghost. Damned proctors, I guess. + AND = { + exists = $TITLE$.var:stele_container + exists = $TITLE$.var:stele_scope_type + # Remember not to compare a character with a title. + $TITLE$.var:stele_scope_type = flag:character + this = $TITLE$.var:stele_container + } + } + } +} + +is_vaguely_danish_bhakti_trigger = { + OR = { + has_culture = culture:danish + culture = { has_name_list = name_list_danish } + # We deliberately use the de jure rather than the geographical area to make this at least a *little* more fluid. + AND = { + is_playable_character = yes + capital_county.kingdom = title:k_denmark + } + } +} + +################################################## +# Varangian Adventure Triggers + +fp1_va_eligible_for_scandinavian_troops_trigger = { + # We only give these to North Germanics. I realise we check this elsewhere, but it makes it a bit easier to hijack the CB for other cultures via modding without weirdness. + culture = { + OR = { + has_cultural_pillar = heritage_north_germanic + this = culture:estonian + any_parent_culture_or_above = { + this = culture:estonian #Estonian + } + } + } + # Who hold at least one county in the initial de jure of the mainland Norse kingdoms. + any_sub_realm_county = { + OR = { + title_province = { geographical_region = dlc_fp1_region_core_mainland_scandinavia } + title:k_esthonia = { + is_de_jure_liege_or_above_target = prev + } + } + culture = scope:attacker.culture + faith = scope:attacker.faith + } +} + +################################################## +# Illustration Triggers + +fp1_should_use_norse_graphics_trigger = { + culture = { has_building_gfx = norse_building_gfx } +} + +fp1_should_use_extra_tribal_graphics_trigger = { + should_use_tribal_realm_palace_graphics_trigger = yes +} + +################################################## +# Shieldmaiden Triggers + +suitable_shieldmaiden_gaoler_trigger = { + #Must be a shieldmaiden. + has_trait = shieldmaiden + NOR = { + #Filter out prisoners that the shieldmaiden would want to see freed. + has_friendly_relationship_trigger = { CHARACTER = root } + #And require that they don't hate their liege. + has_relation_rival = scope:imprisoner + #Make sure they don't really like root, in which case they'd let the escape slide. + opinion = { + target = root + value >= high_positive_opinion + } + #Aaaaand the inverse for actually really hating their host, in which case they don't care about escapees. + opinion = { + target = scope:imprisoner + value <= high_negative_opinion + } + } +} + +################################################## +# Interaction Triggers + +basic_can_have_trial_by_combat_trigger = { + # This is referenced elsewhere, so we keep it separate in order to allow justification for TbCs outside of interactions. + culture = { has_cultural_parameter = has_access_to_trials_by_combat } +} + +can_have_trial_by_combat_trigger = { + # First, evaluate culture to trim down our potentials list. + scope:actor = { basic_can_have_trial_by_combat_trigger = yes } + scope:recipient = { basic_can_have_trial_by_combat_trigger = yes } +} + +eligible_knight_to_champion_trial_by_combat_trigger = { + is_available_ai = yes + can_start_single_combat_trigger = yes +} + +trial_by_combat_shown_and_not_invalid_trigger = { + # Scope:actor must be able to fight personally. + scope:actor = { can_start_single_combat_trigger = yes } + # Scope:actor cannot challenge someone they have a ceasefire against. + scope:actor = { + NOT = { has_truce = scope:recipient } + } + # Scope:actor *definitely* cannot challenge someone they're at war with. + scope:actor = { + NOT = { is_at_war_with = scope:recipient } + } +} + +trial_by_combat_is_valid_trigger = { + # Calc some stuff that might invalidate elsewhere before the bout is sorted. + trial_by_combat_shown_and_not_invalid_trigger = yes + # Must have an imprisonment reason on the character. + scope:actor = { has_imprisonment_reason = scope:recipient } + # Scope:recipient must be able to fight or else have at least *one* designatable champion. + scope:recipient = { + trigger_if = { + limit = { + OR = { + can_start_single_combat_eligibility_checks_trigger = no + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:recipient } + } + } + } + custom_description = { + text = "fp1_tbc_no_available_champions" + OR = { + any_knight = { eligible_knight_to_champion_trial_by_combat_trigger = yes } + # Can use champion court position too if available + AND = { + employs_court_position = champion_court_position + any_court_position_holder = { + type = champion_court_position + eligible_knight_to_champion_trial_by_combat_trigger = yes #trigger checks for prowess, and while its not mandatory that the champ has a high value, we don't want to trap them into having to use their prowess 3 champ to defend their life + } + } + } + } + } + } + # Scope:recipient must not be banned from single combat. + scope:recipient = { + custom_description = { + text = "fp1_tbc_recipient_banned_from_combat" + can_start_single_combat_banned_checks_trigger = no + } + } + # Neither of the characters can be imprisoned. + scope:actor = { is_imprisoned = no } + scope:recipient = { is_imprisoned = no } +} + +################################################## +# Religious Triggers + +gruesome_sacrifices_grand_blot_can_continue_trigger = { + # Standard checks. Using a more lenient trigger here because we don't want to cancel the blot if you're in events or go on a hunt + #is_available_at_peace_adult_lenient = yes + scope:activity ?= { + has_activity_type = activity_gruesome_festival + } +} + +fp1_valid_norse_faith_for_jomsvikings_trigger = { + religion = religion:germanic_religion + has_doctrine_parameter = unreformed +} + +fp1_jomsvikings_have_not_existed_trigger = { + # They've already been destroyed in 1066. + game_start_date < 1000.1.1 + NOR = { + # And otherwise can't currently be created. + exists = global_var:jomsvikings_title + # Nor should they have been made via decision or event. + is_target_in_global_variable_list = { + name = unavailable_unique_decisions + target = flag:flag_forged_jomvikings + } + } +} + +fp1_valid_county_for_jomsvikings_trigger = { + tier = tier_county + is_coastal_county = yes + custom_description = { + text = forge_the_jomsvikings_decision.tt.is_in_correct_region + title_province = { geographical_region = dlc_fp1_region_non_scandinavian_southern_baltic } + } + any_county_province = { + custom_description = { + text = forge_the_jomsvikings_decision.tt.empty_castle_or_city + OR = { + has_holding = no + has_holding_type = castle_holding + has_holding_type = city_holding + } + } + } +} + +################################################## +# Achievement Triggers + +fp1_achievement_culture_norse_trigger = { + OR = { + culture = { has_cultural_pillar = heritage_north_germanic } + culture = culture:norman + } +} + +fp1_achievement_culture_norse_or_rus_trigger = { + OR = { + fp1_achievement_culture_norse_trigger = yes + culture = culture:russian + } +} + +fp1_achievement_religious_norse_trigger = { + religion = religion:germanic_religion +} + +fp1_achievement_culture_plus_religion_norse_trigger = { + fp1_achievement_culture_norse_trigger = yes + fp1_achievement_religious_norse_trigger = yes +} + +################################################### +# Jomsviking Triggers +fp1_ruler_eligible_for_jomsviking_coup = { + # We never want to coup realms with players who might be affected, so just flat-out ban them. + NOR = { + is_ai = no + any_vassal_or_below = { is_ai = no } + any_liege_or_above = { is_ai = no } + } + # And anyone that's close family to/married to a player. + NOR = { + any_spouse = { is_ai = no } + any_close_or_extended_family_member = { is_ai = no } + } + # Veto anyone following the unreformed Norse pagan faith. + NOT = { faith = faith:norse_pagan } + # For simplicity, exclude wars. + is_at_war = no +} diff --git a/common/scripted_triggers/02_ep1_scripted_triggers.txt b/common/scripted_triggers/02_ep1_scripted_triggers.txt new file mode 100644 index 00000000..56c57e4e --- /dev/null +++ b/common/scripted_triggers/02_ep1_scripted_triggers.txt @@ -0,0 +1,400 @@ +################################################# +# TRIGGER LIST # +################################################# +# ep1_is_valid_character_for_inspiration_trigger - Is the character valid to be used within the inspiration system? Character movement may break if these conditions are not true. + +ep1_is_valid_character_for_inspiration_trigger = { + is_adult = yes + is_imprisoned = no + NOT = { exists = inspiration } + + trigger_if = { + limit = { + OR = { + is_pool_guest = yes + is_in_pool_at = location + } + } + # For simplicity, inspired characters travel solo for now. + any_traveling_family_member = { + count = 1 + } + } +} + +ep1_spare_courtier_trigger = { #Used for picking out courtiers in your own court. + is_available_healthy_ai_adult = yes + is_councillor = no + NOR = { + is_close_or_extended_family_of = root + is_spouse_of = root + } +} + +# Court type trait 1 is unlocked by court_grandeur_level 5 +ep1_courtier_valid_for_court_trait_1_trigger = { + scope:cgv_value >= cgv_level_threshold_court_type_trait_1 + NOT = { has_trait = $TYPE$_court } + is_adult = yes +} + +# Court type trait 2 is unlocked by court_grandeur_level 8 +ep1_courtier_valid_for_court_trait_2_trigger = { + scope:cgv_value >= cgv_level_threshold_court_type_trait_2 + NOT = { has_trait = $TYPE$_court_2 } + has_trait = $TYPE$_court_1 + is_adult = yes +} + +############## +# INSPIRATION/ARTIFACT TRIGGERS +############## + +ep1_can_sponsor_inspiration_basic = { + scope:inspiration_owner = { + is_imprisoned = no + } +} + +ep1_is_sponsor_valid_inspiration_basic = { + trigger_if = { + limit = { + exists = scope:inspiration_sponsor + } + scope:inspiration_owner = { + is_courtier_of = scope:inspiration_sponsor + is_imprisoned = no + } + } +} + +ep1_character_had_or_has_inspiration_type_trigger = { + OR = { + AND = { + exists = var:created_artifact_type + var:created_artifact_type = flag:$TYPE$ + } + AND = { + exists = inspiration + inspiration = { has_inspiration_type = $TYPE$_inspiration } + } + } +} + +ep1_no_artifact_decorations_trigger = { + OR = { + scope:wealth < 40 + AND = { + exists = scope:inspiration_owner + scope:inspiration_owner = { has_trait = humble } + } + } +} + +ep1_simple_artifact_decorations_trigger = { + scope:wealth >= 5 + scope:wealth < 70 +} + +ep1_advanced_artifact_decorations_trigger = { + scope:wealth >= 40 + scope:wealth < 90 +} + +ep1_extravagant_artifact_decorations_trigger = { + scope:wealth >= 70 +} + +ep1_artifact_durability_lower_equal_percent_trigger = { + $PERCENT$ > { + value = 0 + add = artifact_durability + divide = artifact_max_durability + } +} + +ep1_artifact_durability_higher_equal_percent_trigger = { + $PERCENT$ < { + value = 0 + add = artifact_durability + divide = artifact_max_durability + } +} + +ep1_character_has_court_artifact_trigger = { + any_character_artifact = { + ep1_artifact_is_court_artifact_trigger = yes + } +} + +ep1_artifact_is_court_artifact_trigger = { + OR = { + artifact_slot_type = wall_big + artifact_slot_type = wall_small + artifact_slot_type = sculpture + artifact_slot_type = book + artifact_slot_type = throne + artifact_slot_type = pedestal + } +} + + +############## +# COURT POSITION TRIGGERS +############## + +#Used to see if the scoped character has ANY court position that CHARACTER can hold +character_can_be_employed_in_a_court_position_trigger = { + OR = { + AND = { + can_employ_court_position_type = court_physician_court_position + $CHARACTER$ = { can_be_employed_as = court_physician_court_position } + } + AND = { + can_employ_court_position_type = master_of_horse_court_position + $CHARACTER$ = { can_be_employed_as = master_of_horse_court_position } + } + AND = { + can_employ_court_position_type = master_of_hunt_court_position + $CHARACTER$ = { can_be_employed_as = master_of_hunt_court_position } + } + AND = { + can_employ_court_position_type = keeper_of_swans_court_position + $CHARACTER$ = { can_be_employed_as = keeper_of_swans_court_position } + } + AND = { + can_employ_court_position_type = travel_leader_court_position + $CHARACTER$ = { can_be_employed_as = travel_leader_court_position } + } + AND = { + can_employ_court_position_type = court_jester_court_position + $CHARACTER$ = { can_be_employed_as = court_jester_court_position } + } + AND = { + can_employ_court_position_type = high_almoner_court_position + $CHARACTER$ = { can_be_employed_as = high_almoner_court_position } + } + AND = { + can_employ_court_position_type = seneschal_court_position + $CHARACTER$ = { can_be_employed_as = seneschal_court_position } + } + AND = { + can_employ_court_position_type = court_tutor_court_position + $CHARACTER$ = { can_be_employed_as = court_tutor_court_position } + } + AND = { + can_employ_court_position_type = cupbearer_court_position + $CHARACTER$ = { can_be_employed_as = cupbearer_court_position } + } + AND = { + can_employ_court_position_type = chief_eunuch_court_position + $CHARACTER$ = { can_be_employed_as = chief_eunuch_court_position } + } + AND = { + can_employ_court_position_type = antiquarian_court_position + $CHARACTER$ = { can_be_employed_as = antiquarian_court_position } + } + AND = { + can_employ_court_position_type = royal_architect_court_position + $CHARACTER$ = { can_be_employed_as = royal_architect_court_position } + } + AND = { + can_employ_court_position_type = lady_in_waiting_court_position + $CHARACTER$ = { can_be_employed_as = lady_in_waiting_court_position } + } + AND = { + can_employ_court_position_type = court_poet_court_position + $CHARACTER$ = { can_be_employed_as = court_poet_court_position } + } + AND = { + can_employ_court_position_type = court_musician_court_position + $CHARACTER$ = { can_be_employed_as = court_musician_court_position } + } + AND = { + can_employ_court_position_type = bodyguard_court_position + $CHARACTER$ = { can_be_employed_as = bodyguard_court_position } + } + AND = { + can_employ_court_position_type = champion_court_position + $CHARACTER$ = { can_be_employed_as = champion_court_position } + } + AND = { + can_employ_court_position_type = food_taster_court_position + $CHARACTER$ = { can_be_employed_as = food_taster_court_position } + } + AND = { + can_employ_court_position_type = executioner_court_position + $CHARACTER$ = { can_be_employed_as = executioner_court_position } + } + AND = { + can_employ_court_position_type = garuda_court_position + $CHARACTER$ = { can_be_employed_as = garuda_court_position } + } + AND = { + can_employ_court_position_type = wet_nurse_court_position + $CHARACTER$ = { can_be_employed_as = wet_nurse_court_position } + } + AND = { + can_employ_court_position_type = akolouthos_court_position + $CHARACTER$ = { can_be_employed_as = akolouthos_court_position } + } + } +} + + +#Used to check if the scoped character can hold any court position +can_be_employed_in_any_court_position_trigger = { + OR = { + can_be_employed_as = court_physician_court_position + can_be_employed_as = master_of_horse_court_position + can_be_employed_as = master_of_hunt_court_position + can_be_employed_as = keeper_of_swans_court_position + can_be_employed_as = court_jester_court_position + can_be_employed_as = high_almoner_court_position + can_be_employed_as = seneschal_court_position + can_be_employed_as = court_tutor_court_position + can_be_employed_as = cupbearer_court_position + can_be_employed_as = chief_eunuch_court_position + can_be_employed_as = antiquarian_court_position + can_be_employed_as = royal_architect_court_position + can_be_employed_as = lady_in_waiting_court_position + can_be_employed_as = court_poet_court_position + can_be_employed_as = court_musician_court_position + can_be_employed_as = bodyguard_court_position + can_be_employed_as = champion_court_position + can_be_employed_as = food_taster_court_position + can_be_employed_as = executioner_court_position + can_be_employed_as = garuda_court_position + can_be_employed_as = travel_leader_court_position + can_be_employed_as = wet_nurse_court_position + can_be_employed_as = akolouthos_court_position + } +} + +##### Hold court + +hold_court_8010_county_trigger = { + any_title_to_title_neighboring_county = { + holder.top_liege = { + NOR = { + THIS = ROOT + is_allied_to = ROOT + is_at_war_with = ROOT + is_close_or_extended_family_of = ROOT + max_military_strength < hold_court_8010_75_strength_value # 75% of ROOT's soldiers + } + } + } +} + +target_of_powerful_faction_trigger = { + exists = yes + OR = { + faction_is_type = liberty_faction + faction_is_type = claimant_faction + } + OR = { + faction_power >= faction_power_threshold + faction_is_at_war = yes + } + trigger_if = { + limit = { exists = special_character } + NOT = { special_character = faction_target.liege } + } +} + +province_has_no_holding_trigger = { # province has no holding + has_ongoing_construction = no + NOR = { + has_holding_type = castle_holding + has_holding_type = tribal_holding + has_holding_type = city_holding + has_holding_type = church_holding + has_holding_type = herder_holding + has_holding_type = nomad_holding + } +} + +county_has_all_holding_types = { # county has all three holding types + any_county_province = { has_holding_type = castle_holding } + any_county_province = { has_holding_type = city_holding } + any_county_province = { has_holding_type = church_holding } +} + +county_has_empty_province_trigger = { + tier = tier_county + any_county_province = { province_has_no_holding_trigger = yes } +} + +county_has_no_city_trigger = { # No city in a county + NOT = { + any_county_province = { has_holding_type = city_holding } + } +} + +county_has_no_church_trigger = { # No church in a county + NOT = { + any_county_province = { has_holding_type = church_holding } + } +} + +############## +# DECISION TRIGGERS +############## + +order_mass_eviction_decision_evictable_courtier_trigger = { + NOR = { + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + any_close_family_member = { + host = root + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + } + } +} + +# For technical reasons, this trigger can't be the same as ep1_decision_0111_list_builder_guts_trigger, but maintains (almost) technical parity with it. +exoticise_a_grand_hall_decision_list_builder_guts_trigger = { + # Is the title presently active? + exists = holder + # Can the two communicate? + holder = { + # Filter out anyone who has the right rank but lacks a mechanical royal court. + has_royal_court = yes + has_dlc_feature = royal_court + # Can the two communicate? + in_diplomatic_range = root + } +} + +############## +# CHARACTER INTERACTIONS TRIGGERS +############## + +indebt_guest_interaction_basic_checks_trigger = { + $ACTOR$ = { + # Gotta have a royal court. + has_royal_court = yes + has_dlc_feature = royal_court + # Gotta have maxed servants to help. + amenity_level = { + type = court_servants + value >= max_amenity_level + } + } +} + +############## +# BANNER TRIGGERS +############## + +artifact_house_not_owns_or_claims_trigger = { + exists = scope:familial_banner + NOR = { + this = scope:familial_banner.artifact_owner.house + has_house_artifact_claim = scope:familial_banner + } + trigger_if = { + limit = { exists = scope:familial_banner.var:banner_dynasty } + house_head.dynasty = scope:familial_banner.var:banner_dynasty + } +} diff --git a/common/scripted_triggers/03_bp1_scripted_triggers.txt b/common/scripted_triggers/03_bp1_scripted_triggers.txt new file mode 100644 index 00000000..6a02f2f2 --- /dev/null +++ b/common/scripted_triggers/03_bp1_scripted_triggers.txt @@ -0,0 +1,315 @@ +##### FAMILY FEUD ##### + +# Story has variable with specified flag +house_feud_story_flag_trigger = { + story_type = story_cycle_house_feud + exists = var:$VARIABLE$ + var:$VARIABLE$ = flag:$FLAG$ +} + +# Feud story targets a specified House +existing_feud_against_target_trigger = { + OR = { + house.house_head ?= { + any_owned_story = { + story_type = story_cycle_house_feud + var:house_feud_house ?= $TARGET$.house + } + } + exists = scope:return_feud_as_true_for_debug + } +} + +# General checks house head can start a feud +house_head_can_start_feud_trigger = { + # Must be House Head + is_house_head = yes + # Stop unlanded AI going crazy with feuds + is_playable_character = yes + NOR = { + # House must not have started a feud recently + exists = house.var:house_feud_cooldown + # Only one Feud can be started per House Head + has_character_flag = had_house_feud_story + # Cannot already be Feuding + any_owned_story = { story_type = story_cycle_house_feud } + } + # Has not recently ended a Feud + house_feud_house_any_end_modifier_trigger = no + # House must be sufficiently large to support a Feud + house = { + any_house_member = { + count >= 5 + is_alive = yes + is_adult = yes + } + } + # Save scopes for checking against + save_temporary_scope_as = house_head_temp +} + +house_head_can_start_feud_against_trigger = { + # General checks that house head can start a feud + house_head_can_start_feud_trigger = yes + # Victim House Head must exist + exists = $TARGET$.house.house_head + # Ensure target is 'equal' + trigger_if = { + limit = { + is_landed = yes + $TARGET$.house.house_head = { is_landed = yes } + } + tier_difference = { + target = $TARGET$.house.house_head + value >= -1 + } + tier_difference = { + target = $TARGET$.house.house_head + value <= 1 + } + } + trigger_else = { + NOR = { + highest_held_title_tier > tier_duchy + $TARGET$.house.house_head.highest_held_title_tier > tier_duchy + } + } + NOR = { + # Is not part of same family as target House Head + is_close_family_of = $TARGET$.house.house_head + # Is not friendly with target House Head + has_any_good_relationship_with_character_trigger = { CHARACTER = $TARGET$.house.house_head } + # Target House must be different + house = $TARGET$.house + } + # Avoid starting Feuds between Vassals and Lieges, as they are not 'equals' + trigger_if = { + limit = { exists = $TARGET$.house.house_head.liege } + NOR = { + # Is not liege of target House Head + this = $TARGET$.house.house_head.liege + # Does not share house with target's liege + this.house = $TARGET$.house.house_head.liege.house + } + } + # Must be near target House Head + in_diplomatic_range = $TARGET$.house.house_head + # Save scopes for checking against + save_temporary_scope_as = house_head_temp + $TARGET$.house.house_head = { save_temporary_scope_as = target_house_head_temp } +} + +# Feud target house has living members +house_feud_target_house_alive_trigger = { + any_owned_story = { + story_type = story_cycle_house_feud + exists = var:house_feud_house + var:house_feud_house.house_head = { is_alive = yes } + } +} + +# House Head, and House is valid to be a Feud target +house_feud_valid_feud_target_trigger = { + exists = house + this = this.house.house_head + is_playable_character = yes + NOR = { + house = root.house + is_close_family_of = root + has_any_good_relationship_with_character_trigger = { CHARACTER = root } + } + save_temporary_scope_as = house_head_temp + # House must not be too small (too easy to wipe out) + house = { + any_house_member = { + count >= 3 + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:house_head_temp } + } + } + # Must be interactable + in_diplomatic_range = root +} + +# Valid to be a target of a murder scheme +house_feud_scheme_target_trigger = { + is_available_adult = yes + save_temporary_scope_as = house_feud_scheme_target_temp + NOR = { + this = this.house.house_head + root = { + is_scheming_against = { target = scope:house_feud_scheme_target_temp } + } + is_in_list = house_feud_scheme_targets + } + root = { + can_start_scheme = { + type = murder + target_character = scope:house_feud_scheme_target_temp + } + } +} + +# Valid member of own house +house_feud_member_trigger = { + is_available_adult = yes + house = root.house + in_diplomatic_range = root + NOT = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + } +} + +# House has no ongoing Fued modifiers or rewards +house_feud_house_any_end_modifier_trigger = { + OR = { + exists = var:house_feud_swapped_house + house = { + OR = { + has_house_modifier = house_feud_terrible_modifier + has_house_modifier = house_feud_bad_modifier + has_house_modifier = house_feud_even_modifier + has_house_modifier = house_feud_good_modifier + has_house_modifier = house_feud_excellent_modifier + } + } + } +} + +# House has no remaining members +house_feud_wiped_out_trigger = { + trigger_if = { + limit = { exists = var:house_feud_first_rival.house } + var:house_feud_first_rival.house = { + NOT = { exists = house_head } + NOT = { + any_house_member = { is_alive = yes } + } + } + } +} + +################################################## +# Sycophant Triggers + +bp1_yearly_8100_sycophant_trigger = { + is_available_ai_adult = yes + liege = $LIEGE$ + reverse_opinion = { + target = $LIEGE$ + value >= 25 + } + NOT = { is_vassal_of = $LIEGE$ } + trigger_if = { + limit = { exists = $LIEGE$.cp:councillor_spouse } + NOT = { this = $LIEGE$.cp:councillor_spouse } + } + trigger_if = { + limit = { + $LIEGE$.faith = { has_doctrine = doctrine_clerical_succession_spiritual_fixed_appointment } + exists = $LIEGE$.cp:councillor_court_chaplain + } + NOT = { this = $LIEGE$.cp:councillor_court_chaplain } + } + OR = { + has_relation_lover = $LIEGE$ + has_relation_friend = $LIEGE$ + can_set_relation_friend_trigger = { CHARACTER = $LIEGE$ } + any_secret = { + secret_type = secret_lover + secret_target = $LIEGE$ + } + } + NOT = { is_close_or_extended_family_of = $LIEGE$ } +} + +house_feud_ai_scheme_trigger = { + is_adult = yes + is_ai = yes + ai_honor < medium_positive_ai_value + any_scheme = { count < 1 } + OR = { + house_feud_ai_murder_join_trigger = yes + house_feud_ai_murder_start_trigger = yes + house_feud_ai_seduce_start_trigger = yes + } +} + +house_feud_ai_murder_join_trigger = { + house = { + any_house_member = { + any_scheme = { + scheme_type = murder + exists = scheme_target_character.house + scheme_target_character.house = scope:story.var:house_feud_house + save_temporary_scope_as = murder_scheme_temp + } + } + } + trigger_if = { + limit = { exists = scope:murder_scheme_temp } + char_can_fit_into_scheme_trigger = { SCHEME = scope:murder_scheme_temp } + NOR = { + is_scheming_against = { target = scope:murder_scheme_temp.scheme_target_character } + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:murder_scheme_temp.scheme_target_character } + } + } + trigger_else = { always = no } +} + +house_feud_ai_murder_start_trigger = { + scope:story.var:house_feud_house = { + any_house_member = { save_temporary_scope_as = murder_victim_temp } + } + trigger_if = { + limit = { exists = scope:murder_victim_temp } + NOT = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:murder_victim_temp } + } + can_start_scheme = { + type = murder + target_character = scope:murder_victim_temp + } + } + trigger_else = { always = no } +} + +house_feud_ai_seduce_start_trigger = { + NOR = { + has_trait = celibate + has_trait = chaste + } + scope:story.var:house_feud_house = { + any_house_member = { + is_married = yes + save_temporary_scope_as = seduce_victim_temp + any_spouse = { + trigger_if = { + limit = { + exists = house + NOT = { house = scope:seduce_victim_temp.house } + } + } + NOT = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:seduce_victim_temp } + } + save_temporary_scope_as = seduce_spouse_temp + } + } + } + trigger_if = { + limit = { + exists = scope:seduce_victim_temp + exists = scope:seduce_spouse_temp + } + NOR = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:seduce_victim_temp } + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:seduce_spouse_temp } + } + can_start_scheme = { + type = seduce + target_character = scope:seduce_spouse_temp + } + } + trigger_else = { always = no } +} diff --git a/common/scripted_triggers/03_bp2_scripted_triggers.txt b/common/scripted_triggers/03_bp2_scripted_triggers.txt new file mode 100644 index 00000000..ca908c33 --- /dev/null +++ b/common/scripted_triggers/03_bp2_scripted_triggers.txt @@ -0,0 +1,81 @@ +# Scripted Triggers for BP2 related things + +# Trigger to find a random appropriate educator for a child +is_relevant_to_child = { + is_available_ai_adult = yes + #location = $CHILD$.location +} + +has_level_1_education_trait_trigger = { + OR = { + has_trait = education_diplomacy_1 + has_trait = education_martial_1 + has_trait = education_stewardship_1 + has_trait = education_intrigue_1 + has_trait = education_learning_1 + } +} + +has_level_2_education_trait_trigger = { + OR = { + has_trait = education_diplomacy_2 + has_trait = education_martial_2 + has_trait = education_stewardship_2 + has_trait = education_intrigue_2 + has_trait = education_learning_2 + } +} + +has_level_3_education_trait_trigger = { + OR = { + has_trait = education_diplomacy_3 + has_trait = education_martial_3 + has_trait = education_stewardship_3 + has_trait = education_intrigue_3 + has_trait = education_learning_3 + } +} + +has_level_4_education_trait_trigger = { + OR = { + has_trait = education_diplomacy_4 + has_trait = education_martial_4 + has_trait = education_stewardship_4 + has_trait = education_intrigue_4 + has_trait = education_learning_4 + } +} + +style_changing_reformer_trigger = { + OR = { + root.top_liege ?= { has_character_flag = $FLAG$ } + AND = { + has_variable = years_as_varangian + has_character_flag = $FLAG$ + is_landed = no + } + } +} + +hostage_oath_of_friendship_trigger = { + AND = { + OR = { + has_relation_friend = scope:recipient + has_relation_best_friend = scope:recipient + } + OR = { + scope:actor = { + any_memory = { + has_memory_type = hostage_oath_of_friendship + has_memory_participant = scope:recipient + } + } + scope:recipient = { + any_memory = { + has_memory_type = hostage_oath_of_friendship + has_memory_participant = scope:actor + } + } + } + } +} diff --git a/common/scripted_triggers/03_fp2_scripted_triggers.txt b/common/scripted_triggers/03_fp2_scripted_triggers.txt new file mode 100644 index 00000000..93638a76 --- /dev/null +++ b/common/scripted_triggers/03_fp2_scripted_triggers.txt @@ -0,0 +1,744 @@ + +################################################## +# General Triggers + +fp2_should_use_iberian_graphics_trigger = { + culture = { has_building_gfx = iberian_building_gfx } +} + +fp2_character_any_involvement_iberian_struggle_trigger = { + has_fp2_dlc_trigger = yes + OR = { + fp2_character_involved_in_struggle_trigger = yes + fp2_character_interloper_in_struggle_trigger = yes + } +} + +fp2_character_involved_in_struggle_trigger = { + has_fp2_dlc_trigger = yes + any_character_struggle = { + involvement = involved + is_struggle_type = iberian_struggle + } +} + +fp2_character_interloper_in_struggle_trigger = { + has_fp2_dlc_trigger = yes + any_character_struggle = { + involvement = interloper + is_struggle_type = iberian_struggle + } +} + +fp2_character_uninvolved_in_struggle_trigger = { + has_fp2_dlc_trigger = yes + exists = struggle:iberian_struggle + fp2_character_interloper_in_struggle_trigger = no + fp2_character_involved_in_struggle_trigger = no +} + +eligible_for_fp2_dynasty_legacies_trigger = { + has_fp2_dlc_trigger = yes + dynasty = { + OR = { + dynast = { + OR = { + any_character_struggle = { + involvement = involved + is_struggle_type = iberian_struggle + } + culture = { + has_cultural_pillar = heritage_iberian + } + AND = { + exists = capital_province + capital_province = { + geographical_region = world_europe_west_iberia + } + } + } + } + } + } +} + + +is_toledo_ownership_valid_trigger = { + title:c_toledo.holder = { + OR = { + this = root + liege = root + top_liege = root + } + faith = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } +} + +################################################## +# Cultural & Regional Triggers + +culture_valid_for_ritualised_best_friends_trigger = { + culture = { has_cultural_parameter = strong_hooks_and_stress_effects_best_friends } +} + +valid_ritualised_best_friendship_two_way_trigger = { + $ACTOR_FRIEND$ = { + # Check that they have the appropriate cultural parameter... + culture_valid_for_ritualised_best_friends_trigger = yes + # ... and that they've still got a best friend... + any_relation = { + type = best_friend + this = $RECIPIENT_FRIEND$ + # ... who also still has the cultural parameter. + culture_valid_for_ritualised_best_friends_trigger = yes + } + } +} + +valid_ritualised_best_friendship_one_way_trigger = { + $ACTOR_FRIEND$ = { + # Check that they have the appropriate cultural parameter... + culture_valid_for_ritualised_best_friends_trigger = yes + # ... and that they've got a best friend... + any_relation = { + type = best_friend + count >= 1 + # ... who also still has the cultural parameter. + culture_valid_for_ritualised_best_friends_trigger = yes + } + } +} + +################################################## +# Illustration Triggers + + + +################################################## +# Interaction Triggers + +has_any_best_friend_synergy_bonus_modifier_trigger = { + OR = { + has_character_modifier = fp2_single_synergy_diplomacy_modifier + has_character_modifier = fp2_single_synergy_martial_modifier + has_character_modifier = fp2_single_synergy_stewardship_modifier + has_character_modifier = fp2_single_synergy_intrigue_modifier + has_character_modifier = fp2_single_synergy_learning_modifier + has_character_modifier = fp2_double_synergy_diplomacy_diplomacy_modifier + has_character_modifier = fp2_double_synergy_diplomacy_martial_modifier + has_character_modifier = fp2_double_synergy_diplomacy_stewardship_modifier + has_character_modifier = fp2_double_synergy_diplomacy_intrigue_modifier + has_character_modifier = fp2_double_synergy_diplomacy_learning_modifier + has_character_modifier = fp2_double_synergy_martial_diplomacy_modifier + has_character_modifier = fp2_double_synergy_martial_martial_modifier + has_character_modifier = fp2_double_synergy_martial_stewardship_modifier + has_character_modifier = fp2_double_synergy_martial_intrigue_modifier + has_character_modifier = fp2_double_synergy_martial_learning_modifier + has_character_modifier = fp2_double_synergy_stewardship_diplomacy_modifier + has_character_modifier = fp2_double_synergy_stewardship_martial_modifier + has_character_modifier = fp2_double_synergy_stewardship_stewardship_modifier + has_character_modifier = fp2_double_synergy_stewardship_intrigue_modifier + has_character_modifier = fp2_double_synergy_stewardship_learning_modifier + has_character_modifier = fp2_double_synergy_intrigue_diplomacy_modifier + has_character_modifier = fp2_double_synergy_intrigue_martial_modifier + has_character_modifier = fp2_double_synergy_intrigue_stewardship_modifier + has_character_modifier = fp2_double_synergy_intrigue_intrigue_modifier + has_character_modifier = fp2_double_synergy_intrigue_learning_modifier + has_character_modifier = fp2_double_synergy_learning_diplomacy_modifier + has_character_modifier = fp2_double_synergy_learning_martial_modifier + has_character_modifier = fp2_double_synergy_learning_stewardship_modifier + has_character_modifier = fp2_double_synergy_learning_intrigue_modifier + has_character_modifier = fp2_double_synergy_learning_learning_modifier + } +} + +purchase_truce_interaction_recipient_can_de_jure_war_actor_trigger = { + scope:recipient = { + OR = { + has_cb_on = { + target = scope:actor + cb = de_jure_cb + } + has_cb_on = { + target = scope:actor + cb = individual_county_de_jure_cb + } + has_cb_on = { + target = scope:actor + cb = individual_duchy_de_jure_cb + } + } + } +} + +fp2_struggle_contract_assistance_war_winning_trigger = { + trigger_if = { + limit = { + scope:recipient = { is_attacker_in_war = prev } + } + attacker_war_score >= offer_assistance_interaction_already_winning_value + } + trigger_else = { defender_war_score >= offer_assistance_interaction_already_winning_value } +} + +fp2_struggle_contract_assistance_war_losing_trigger = { + trigger_if = { + limit = { + scope:recipient = { is_attacker_in_war = prev } + } + defender_war_score >= offer_assistance_interaction_already_losing_value + } + trigger_else = { attacker_war_score >= offer_assistance_interaction_already_losing_value } +} + +fp2_struggle_contract_assistance_war_outnumbering_trigger = { + trigger_if = { + limit = { + scope:recipient = { is_attacker_in_war = prev } + } + war_attacker_total_strength_halved_value > war_defender_total_strength_value + } + trigger_else = { war_defender_total_strength_halved_value > war_attacker_total_strength_value } + } + +fp2_struggle_contract_assistance_war_outnumbered_trigger = { + trigger_if = { + limit = { + scope:recipient = { is_attacker_in_war = prev } + } + war_defender_total_strength_halved_value > war_attacker_total_strength_value + } + trigger_else = { war_attacker_total_strength_halved_value > war_defender_total_strength_value } +} + +fp2_struggle_contract_assistance_war_outnumbered_minor_trigger = { + trigger_if = { + limit = { + scope:recipient = { is_attacker_in_war = prev } + } + war_defender_total_strength_value > war_attacker_total_strength_value + } + trigger_else = { war_attacker_total_strength_value > war_defender_total_strength_value } +} + +fp2_struggle_contract_assistance_war_insufficient_trigger = { + trigger_if = { + limit = { + scope:recipient = { is_attacker_in_war = prev } + } + scope:actor.max_military_strength < war_defender_total_strength_tenth_value + } + trigger_else = { scope:actor.max_military_strength < war_attacker_total_strength_tenth_value } +} + +################################################## +# Religious Triggers + + + +################################################## +# Achievement Triggers + +################################################## +# Decision Triggers + +##### Struggle Ending ##### + +### Common + +# Checks a de jure kingdom of Hispania is completely controlled +fp2_struggle_ending_hold_de_jure_kingdom_trigger = { + title:e_spain ?= { + any_in_de_jure_hierarchy = { + tier = tier_kingdom + any_in_de_jure_hierarchy = { + tier = tier_county + } + holder = root + root = { + completely_controls = prev + } + } + } +} + +# Checks less than half of Iberia owned +fp2_struggle_ending_percent_iberia_trigger = { + any_county_in_region = { + region = world_europe_west_iberia + percent < fp2_struggle_compromise_owned_percent_decimal_value + holder.top_liege = root + } +} + +# Checks no more than half of Iberia is owned by another +fp2_struggle_ending_other_percent_iberia_trigger = { + struggle:iberian_struggle = { + NOT = { + any_involved_ruler = { + exists = primary_title # Max figured out that is_independent_ruler causes errors if you are unlanded + NOT = { this = root } + is_independent_ruler = yes + primary_title = { is_mercenary_company = no } + any_county_in_region = { + region = world_europe_west_iberia + percent > fp2_struggle_compromise_involved_percent_decimal_value + holder.top_liege = prev + } + } + } + } +} + +# Checks duchy is held by an independent ruler who owns at least half of it +fp2_struggle_ending_compromise_independent_duchy_trigger = { + tier = tier_duchy + # Is created + exists = holder + OR = { + # Is not the heartland of an existing kingdom + NOT = { title_capital_county = de_jure_liege.title_capital_county } + # Capital duke doesn't control kingdom, edge case + AND = { + exists = de_jure_liege.holder + NOT = { holder = de_jure_liege.holder } + } + } + # Is ruled by an independent duke + holder = { + is_independent_ruler = yes + save_temporary_scope_as = duchy_holder + primary_title = { + is_mercenary_company = no + OR = { + tier = tier_duchy + tier = tier_kingdom + } + } + } + OR = { + this = holder.primary_title + holder.primary_title.tier = tier_kingdom + } + # Duke rules at least half the de jure duchy + any_direct_de_jure_vassal_title = { + percent >= 0.5 + holder.top_liege = scope:duchy_holder + } +} + +# Checks duchy should be split from de jure kingdom +fp2_struggle_ending_compromise_split_duchy_trigger = { + tier = tier_duchy + # Has not been tampered with already + NOT = { is_in_list = duchy_kingdom } + # Is not created + NOT = { exists = holder } + # Is not heartland of an existing kingdom + NOT = { title_capital_county = de_jure_liege.title_capital_county } + save_temporary_scope_as = duchy + # Less than half is owned by de jure kingdom, if created + trigger_if = { + limit = { exists = scope:duchy.de_jure_liege.holder } + any_direct_de_jure_vassal_title = { + percent < 0.5 + holder.top_liege = scope:duchy.de_jure_liege.holder.top_liege + } + } + trigger_else = { always = no } +} + +# Checks titular duchy should be made into de jure kingdom +fp2_struggle_ending_compromise_titular_trigger = { + # Has not been tampered with already + NOT = { is_in_list = duchy_kingdom } + # Is created + exists = holder + # Is ruled by an independent duke + holder = { + is_independent_ruler = yes + primary_title = { + is_mercenary_company = no + tier = tier_duchy + } + } + # Titular duke holds at least half of any de jure duchy of Hispania + title:e_spain = { + any_in_de_jure_hierarchy = { + tier = tier_duchy + any_direct_de_jure_vassal_title = { + percent >= 0.5 + holder.top_liege = scope:special_duchy.holder + } + } + } +} + +# Should title be created by ststus quo decision? +fp2_struggle_ending_compromise_create_title_trigger = { + NOR = { + this = title:e_spain + exists = holder + is_in_list = assigned_title + # Only if no other same rank rulers in title (e.g. multiple kings under empire) + any_direct_de_jure_vassal_title = { + exists = holder + NOT = { holder = scope:new_owner_temp } + } + } +} + +# Checks two cultures were Involved in the struggle that ended in Conciliation +fp2_struggle_conciliation_special_cultural_rules_trigger = { + has_global_variable = fp2_struggle_conciliation_ending + any_in_global_list = { + variable = fp2_struggle_ending_culture_list + this = $C1$.culture + } + any_in_global_list = { + variable = fp2_struggle_ending_culture_list + this = $C2$.culture + } +} + +# Checks two faiths were Involved in the struggle that ended in Conciliation +are_holy_wars_disabled_by_struggle_conciliation_trigger = { + has_global_variable = fp2_struggle_conciliation_ending + any_in_global_list = { + variable = fp2_struggle_ending_faith_list + this = scope:attacker.faith + } + any_in_global_list = { + variable = fp2_struggle_ending_faith_list + this = scope:defender.faith + } +} + +# Checks if characters were both involved in struggle +fp2_struggle_conciliation_recipient_actor_involved_trigger = { + has_global_variable = fp2_struggle_conciliation_ending + AND = { + scope:actor.capital_province = { geographical_region = world_europe_west_iberia } + scope:recipient.capital_province = { geographical_region = world_europe_west_iberia } + # Offer comes from an Involved culture/faith character + OR = { + any_in_global_list = { + variable = fp2_struggle_ending_faith_list + this = scope:actor.faith + } + any_in_global_list = { + variable = fp2_struggle_ending_culture_list + this = scope:actor.culture + } + } + # Recipient is from an Involved culture/faith + OR = { + any_in_global_list = { + variable = fp2_struggle_ending_faith_list + this = scope:recipient.faith + } + any_in_global_list = { + variable = fp2_struggle_ending_culture_list + this = scope:recipient.culture + } + } + } +} + +# Checks if character was involved in struggle +fp2_struggle_conciliation_scope_uninvolved_trigger = { + has_global_variable = fp2_struggle_conciliation_ending + OR = { + NOR = { + any_in_global_list = { + variable = fp2_struggle_ending_faith_list + this = $SCOPE$.faith + } + any_in_global_list = { + variable = fp2_struggle_ending_culture_list + this = $SCOPE$.culture + } + } + NOT = { + $SCOPE$.capital_province = { geographical_region = world_europe_west_iberia } + } + } +} + +fp2_struggle_compromise_transfer_duchy_trigger = { + tier = tier_duchy + save_temporary_scope_as = transfer_duchy + # Duchy is completely controlled by its capital's holder's top_liege + exists = title_capital_county.holder.top_liege + title_capital_county.holder.top_liege = { completely_controls = scope:transfer_duchy } + # De jure liege does not control duchy + trigger_if = { + limit = { exists = kingdom.holder } + NOT = { kingdom = scope:transfer_duchy.title_capital_county.holder.top_liege.capital_county.kingdom } + } + # Is controlled by a kingdom tier + trigger_else = { title_capital_county.holder.top_liege.primary_title.tier >= tier_kingdom } + # Duchy is connected de_jure to holders kingdom + any_de_jure_county = { + any_title_to_title_neighboring_and_across_water_county = { + exists = kingdom.holder + kingdom.holder = scope:transfer_duchy.title_capital_county.holder.top_liege + } + } +} + +fp2_struggle_council_toledo_attendee_trigger = { + OR = { + has_trait = education_learning_3 + has_trait = education_learning_4 + has_trait = education_learning_5 + } +} + +fp2_struggle_council_toledo_decision_trigger = { + is_toledo_ownership_valid_trigger = yes + is_at_war = no +} + +fp2_struggle_secure_iberian_foothold_iberian_kingdom_trigger = { + tier = tier_kingdom + de_jure_liege = title:e_spain + root = { completely_controls = prev } + save_temporary_scope_as = iberian_kingdom_temp +} + +fp2_struggle_secure_iberian_foothold_faith_trigger = { + fp2_struggle_secure_iberian_foothold_faith_percent_value >= fp2_struggle_secure_iberian_foothold_faith_target_percent_value +} + +fp2_struggle_secure_iberian_foothold_outsider_kingdom_trigger = { + any_de_jure_county = { + any_title_to_title_neighboring_and_across_water_county = { + NOT = { empire = title:e_spain } + kingdom.holder = root + } + } +} + +fp2_struggle_iberian_reclamation_should_vassalize_trigger = { + any_character_struggle = { is_struggle_type = iberian_struggle } + any_held_title = { tier < scope:attacker.primary_title.tier } + any_realm_county = { + count = all + duchy = { is_in_list = target_titles } + any_county_struggle = { is_struggle_type = iberian_struggle } + } +} + +fp2_struggle_any_realm_county_in_hispania_trigger = { + any_realm_county = { target_is_de_jure_liege_or_above = title:e_spain } +} + +fp2_iberian_reclamation_vassalize_iberian_trigger = { + tier = tier_county + holder = { + any_character_struggle = { + involvement = involved + is_struggle_type = iberian_struggle + } + liege = scope:defender + NOT = { this = scope:defender } + capital_county = { + any_county_struggle = { is_struggle_type = iberian_struggle } + } + } +} + +fp2_iberian_reclamation_involved_county_trigger = { + any_realm_county = { + any_county_struggle = { is_struggle_type = iberian_struggle } + } +} + +fp2_iberian_reclamation_vassalize_vassal_trigger = { + primary_title.tier >= tier_county + primary_title.tier < scope:attacker.primary_title.tier + any_character_struggle = { is_struggle_type = iberian_struggle } + capital_county = { + duchy = { is_in_list = target_titles } + } + any_sub_realm_county = { + count = all + duchy = { is_in_list = target_titles } + any_county_struggle = { is_struggle_type = iberian_struggle } + } +} + +fp2_struggle_enforce_truce_war_leader_trigger = { + custom_tooltip = { + text = fp2_enforce_truce_war_with_not_involved_tt + any_character_struggle = { + involvement = involved + } + } + custom_tooltip = { + text = fp2_enforce_truce_tier_difference_tt + tier_difference = { + target = scope:actor + value <= 0 + } + } + NOR = { + this = scope:recipient + this = scope:actor + } + custom_tooltip = { + text = fp2_enforce_truce_liege_or_independent_tt + OR = { + scope:recipient = { is_independent_ruler = yes } + scope:recipient.top_liege = scope:actor.top_liege + is_independent_ruler = yes + top_liege = scope:actor.top_liege + } + } +} + +fp2_bargain_fealty_war_outnumbered_trigger = { + war_attacker_total_strength_halved_value > scope:recipient.max_military_strength +} + +fp2_bargain_fealty_war_losing_trigger = { + attacker_war_score >= fp2_bargain_fealty_interaction_already_losing_value +} + +# We use a hard trigger so that this can be easily adjusted without overwriting the rest of the fp2_interactions file by modders. +struggle_can_access_unlocks_bargain_fealty_interaction_trigger = { + # Just uhh, use an OR if you add something else. + is_struggle_type = iberian_struggle +} + +################################################## +# Multi-File Event Triggers + +fp2_lyonese_monk_0002_papal_hof_trigger = { + religion = religion:christianity_religion + exists = faith.religious_head + faith.religious_head_title = title:k_papal_state +} + +fp2_lyonese_monk_0002_valid_character_configuration_trigger = { + OR = { + has_trait = scholar + has_trait = theologian + has_trait = lifestyle_mystic + AND = { + is_ai = no + learning >= very_high_skill_rating + has_lifestyle = learning_lifestyle + } + } +} + +fp2_lyonese_monk_0002_valid_court_trigger = { + # Must have the Pope as a HoF. + fp2_lyonese_monk_0002_papal_hof_trigger = yes + # Filter out anyone not able to be at home when the monk comes a'knockin'. + is_physically_able = yes + # Must be into bookish discussions. + ## Narratively, this is what attracts them to your court. + ## Mechanically, this is how players can opt in for the chain so it's not completely random. + fp2_lyonese_monk_0002_valid_character_configuration_trigger = yes + # Remove non-playables. + NOR = { + government_has_flag = government_is_theocracy + government_has_flag = government_is_special_republic + } + # Plus, for various reasons, we don't want Lyon _itself_. + NOT = { + any_held_title = { this = title:c_lyon } + } +} + +fp2_lyonese_monk_0000_valid_for_events_trigger = { + fp2_lyonese_monk_0000_out_of_realm_trigger = no + fp2_lyonese_monk_0000_out_of_freedom_trigger = no + fp2_lyonese_monk_0000_out_of_popes_trigger = no + fp2_lyonese_monk_0000_out_of_faith_trigger = no +} + +fp2_lyonese_monk_0000_out_of_realm_trigger = { + scope:acolyte = { + OR = { + is_alive = no + is_imprisoned = yes + AND = { + is_landed_or_landless_administrative = no + NOT = { + host = scope:acolyte_host + # Make an exception if you're in prison, since that should give a different event. + scope:acolyte_host = { is_imprisoned = no } + } + } + AND = { + is_landed_or_landless_administrative = yes + NOT = { + any_liege_or_above = { this = scope:acolyte_host } + } + } + } + } +} + +fp2_lyonese_monk_0000_out_of_freedom_trigger = { is_imprisoned = yes } + +fp2_lyonese_monk_0000_out_of_popes_trigger = { + NOT = { exists = scope:story.var:base_faith.religious_head } +} + +fp2_lyonese_monk_0000_out_of_faith_trigger = { + OR = { + NOT = { scope:acolyte.faith.religious_head = scope:story.var:base_faith.religious_head } + NOT = { scope:acolyte_host.faith.religious_head = scope:story.var:base_faith.religious_head } + } +} + +fp2_does_this_player_care_about_the_fate_of_iberia = { + NOT = { this = root } + OR = { + location = { + OR = { # Is in region + geographical_region = world_europe_west + geographical_region = world_africa_north + geographical_region = world_europe_south_italy + } + } + struggle:iberian_struggle = { is_culture_involved_in_struggle = prev.culture } + } +} + +fp2_eligible_for_yearly_events_trigger = { + has_fp2_dlc_trigger = yes + OR = { + any_character_struggle = { + involvement = involved + } + culture = { + has_cultural_pillar = heritage_iberian + } + AND = { + exists = capital_province + capital_province = { + geographical_region = world_europe_west_iberia + } + } + } +} + +fp2_purchase_truce_interaction_soft_requirements_trigger = { + OR = { + always = no + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = unlocks_truce_purchasing_interaction + } + has_perk = defensive_negotiations_perk + culture = { has_cultural_parameter = unlocks_purchase_truce } + } +} diff --git a/common/scripted_triggers/04_ep2_accolade_triggers.txt b/common/scripted_triggers/04_ep2_accolade_triggers.txt new file mode 100644 index 00000000..4541da18 --- /dev/null +++ b/common/scripted_triggers/04_ep2_accolade_triggers.txt @@ -0,0 +1,9 @@ +# Triggers related to knights and accolades + +ep2_can_be_accolade_successor_base_trigger = { + is_acclaimed = no + is_accolade_successor = no + highest_held_title_tier <= tier_barony + is_alive = yes + is_adult = yes +} diff --git a/common/scripted_triggers/04_ep2_tour_triggers.txt b/common/scripted_triggers/04_ep2_tour_triggers.txt new file mode 100644 index 00000000..81902e51 --- /dev/null +++ b/common/scripted_triggers/04_ep2_tour_triggers.txt @@ -0,0 +1,79 @@ + +################################################## +# Triggers related to the tour activity + +ep2_phase_general_location_checks = { + # Don't localize all the other stuff if you have no province owner anyway + trigger_if = { + limit = { has_province_owner = yes } + province_owner = { + exists = liege + liege = scope:host + NOT = { this = scope:host } + highest_held_title_tier >= tier_county + exists = capital_province + capital_province = root + is_available = yes + age >= 12 + } + } + trigger_else = { + has_province_owner = yes + } +} + +ep2_tour_phase_invalidation_check = { + scope:activity = { + # TODO_CD_EP2, make their heir visitable if they weren't landed before inheriting. Should be doable in an on_action by checking if the heir is currently in the vassals to visit list, and if not, add them to it. + NOT = { + any_activity_phase_location_past = { + province_owner = scope:province.province_owner + } + } + } + scope:province = { + NOT = { province_owner = scope:host } + province_owner = { + exists = liege + liege = scope:host + location = scope:province + highest_held_title_tier >= tier_county + #Checks mostly matching is_available: + is_in_army = no + is_travelling = no + is_imprisoned = no + has_contagious_deadly_disease_trigger = no + NOT = { has_trait = incapable } + # Variable set within the adventure inspiration events + NOT = { has_variable = gone_adventuring } + #We don't invalidate if it stopped being the capital province. + is_at_war = no + } + } +} + +travel_lifestyle_track_greater_equal_trigger = { + has_trait = lifestyle_traveler + has_trait_xp = { + trait = lifestyle_traveler + track = $TRACK$ + value >= $GREATER_EQUAL$ + } +} + +travel_lifestyle_track_less_trigger = { + has_trait = lifestyle_traveler + has_trait_xp = { + trait = lifestyle_traveler + track = $TRACK$ + value < $LESS_THAN$ + } +} + +is_being_visited_on_tour_strict = { + has_character_flag = being_visited_on_tour + # Extra sanity check to verify that our liege is actually still on a tour + liege ?= { + involved_activity ?= { has_activity_type = activity_tour } + } +} diff --git a/common/scripted_triggers/04_ep2_tournament_triggers.txt b/common/scripted_triggers/04_ep2_tournament_triggers.txt new file mode 100644 index 00000000..9382ad3c --- /dev/null +++ b/common/scripted_triggers/04_ep2_tournament_triggers.txt @@ -0,0 +1,537 @@ +chariot_race_trigger = { + involved_activity.activity_host.culture = { + OR = { + AND = { + has_cultural_tradition = tradition_ep3_roman_ceremonies + NOT = { has_cultural_era_or_later = culture_era_late_medieval } + } + this = culture:roman + } + } +} + +activity_is_valid_tournament_contestant_training_decision = { + is_alive = yes + is_adult = yes + is_imprisoned = no + # Exclude clergy who don't fight + trigger_if = { + limit = { is_clergy = yes } + faith = { has_doctrine_parameter = clergy_can_fight } + } +} + +activity_is_competing_trigger = { + activity_is_valid_tournament_contestant = yes + is_in_guest_subset = { name = contestant } + exists = var:progress_to_victory # Ensure they have a PtV as a valid contestant +} + +activity_is_valid_tournament_contestant = { + exists = involved_activity + involved_activity = { has_activity_type = activity_tournament } + is_alive = yes + is_adult = yes + is_imprisoned = no + # Exclude clergy who don't fight + trigger_if = { + limit = { is_clergy = yes } + OR = { + faith = { has_doctrine_parameter = clergy_can_fight } + culture = { has_cultural_parameter = culture_clergy_can_fight } + } + } + # Has not opted out + NOR = { + has_character_flag = tournament_not_competing + is_in_guest_subset = { name = spectator } + } + trigger_if = { + limit = { + involved_activity = { + NOR = { + has_current_phase = tournament_phase_horse_race + has_current_phase = tournament_phase_board_game + has_current_phase = tournament_phase_recital + } + } + } + # Only martial sex competes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = involved_activity.activity_host } + NOR = { + has_trait = wounded_2 + has_trait = wounded_3 + } + } + # Mulan is clever enough not to reveal themselves + trigger_if = { + limit = { + involved_activity = { has_current_phase = tournament_phase_wrestling } + } + NOT = { has_character_modifier = ignores_gender_army_rules } + } + NOT = { + has_trait = incapable + } + trigger_if = { + limit = { + NOT = { + involved_activity = { has_current_phase = tournament_phase_horse_race } + } + } + NOR = { + has_trait = blind + has_trait = infirm + } + } + trigger_if = { # Blind and maimed people don't do archery + limit = { + NOT = { + involved_activity = { has_current_phase = tournament_phase_archery } + } + } + NOR = { + has_trait = blind + has_trait = maimed + } + } +} + +activity_tournament_contest_non_martial_gender_allowed = { + involved_activity ?= { + OR = { + has_current_phase = tournament_phase_horse_race + has_current_phase = tournament_phase_board_game + has_current_phase = tournament_phase_recital + } + } +} + +activity_tournament_contest_martial_gender_only = { + involved_activity ?= { + OR = { + has_current_phase = tournament_phase_duel + has_current_phase = tournament_phase_wrestling + has_current_phase = tournament_phase_melee + has_current_phase = tournament_phase_archery + has_current_phase = tournament_phase_joust + } + } +} + +activity_has_reason_to_cheer_character_trigger = { + exists = $CHAR$ + OR = { + this = $CHAR$ + AND = { + opinion = { + target = $CHAR$ + value >= 25 + } + OR = { + is_close_family_of = $CHAR$ + is_consort_of = $CHAR$ + has_any_good_relationship_with_character_trigger = { CHARACTER = $CHAR$ } + } + } + } +} + +activity_has_reason_to_anger_character_trigger = { + exists = $CHAR$ + NOT = { this = $CHAR$ } + opinion = { + target = $CHAR$ + value < 25 + } + has_any_bad_relationship_with_character_trigger = { CHARACTER = $CHAR$ } +} + +tournament_contest_wager_trigger = { + AND = { + has_current_phase = tournament_phase_$CONTEST$ + NOT = { + any_guest_subset = { + name = winner + phase = tournament_phase_$CONTEST$ + } + } + } + any_guest_subset_current_phase = { + name = qualified + count >= 3 + } + trigger_if = { + limit = { exists = var:contest_versus_progress } + var:contest_versus_progress <= 3 + } +} + +activity_tournament_armor_trigger = { + involved_activity ?= { has_activity_type = activity_tournament } + OR = { + AND = { + is_in_guest_subset = { name = qualified } + involved_activity = { + OR = { + has_current_phase = tournament_phase_melee + has_current_phase = tournament_phase_duel + has_current_phase = tournament_phase_joust + } + } + } + AND = { + has_character_modifier = ignores_gender_army_rules + is_in_guest_subset = { name = qualified } + } + } +} + +activity_tournament_shirtless_trigger = { + involved_activity ?= { + has_activity_type = activity_tournament + has_current_phase = tournament_phase_wrestling + } + is_in_guest_subset = { name = qualified } +} + +activity_tournament_valid_winner_trigger = { + is_alive = yes + exists = var:contest_aptitude + exists = var:progress_to_victory +} + +activity_adult_available_or_attending_same_activity_trigger = { + is_adult = yes + OR = { + is_available = yes + AND = { + exists = involved_activity + involved_activity = scope:activity + } + } +} + +activity_tournament_versus_contest_trigger = { + OR = { + has_current_phase = tournament_phase_joust + has_current_phase = tournament_phase_wrestling + has_current_phase = tournament_phase_duel + has_current_phase = tournament_phase_board_game + } +} + +activity_tournament_team_contest_trigger = { + scope:activity = { has_current_phase = tournament_phase_melee } +} + +activity_tournament_turn_contest_trigger = { + scope:activity = { + OR = { + has_current_phase = tournament_phase_archery + has_current_phase = tournament_phase_recital + } + } +} + +activity_tournament_mind_contest_trigger = { + scope:activity = { + OR = { + has_current_phase = tournament_phase_recital + has_current_phase = tournament_phase_board_game + } + } +} + +activity_tournament_prowess_contest_trigger = { + scope:activity = { + OR = { + has_current_phase = tournament_phase_melee + has_current_phase = tournament_phase_joust + has_current_phase = tournament_phase_duel + has_current_phase = tournament_phase_wrestling + } + } +} + +activity_tournament_armor_contest_trigger = { + scope:activity = { + OR = { + has_current_phase = tournament_phase_melee + has_current_phase = tournament_phase_joust + has_current_phase = tournament_phase_duel + } + } +} + +activity_tournament_horse_contest_trigger = { + scope:activity = { + OR = { + has_current_phase = tournament_phase_horse_race + has_current_phase = tournament_phase_joust + has_current_phase = tournament_phase_melee + } + } +} + +activity_tournament_race_contest_trigger = { + scope:activity = { has_current_phase = tournament_phase_horse_race } +} + +activity_tournament_same_team_trigger = { + scope:activity = { + OR = { + AND = { + any_guest_subset = { + name = team_alpha + this = $FIRST$ + } + any_guest_subset = { + name = team_alpha + this = $SECOND$ + } + } + AND = { + any_guest_subset = { + name = team_beta + this = $FIRST$ + } + any_guest_subset = { + name = team_beta + this = $SECOND$ + } + } + } + } +} + +tournament_character_any_contest_winner_trigger = { + involved_activity = { + any_guest_subset = { + name = winner + this = $CHAR$ + phase = tournament_phase_$CONTEST$ + } + } +} + +contest_versus_player_vs_ai_trigger = { + calc_true_if = { + amount = 1 + scope:versus_matchee = { is_ai = no } + scope:versus_matcher = { is_ai = no } + } + calc_true_if = { + amount = 1 + scope:versus_matchee = { is_ai = yes } + scope:versus_matcher = { is_ai = yes } + } + NOR = { + scope:versus_matchee = { has_character_flag = resigned_contest_flag } + scope:versus_matcher = { has_character_flag = resigned_contest_flag } + } +} + +contest_event_general_contestant_valid_trigger = { + is_alive = yes + exists = var:contest_aptitude + exists = var:progress_to_victory + is_ai = yes + NOT = { this = root } +} + +has_ongoing_grand_activity_trigger = { + trigger_if = { + limit = { exists = involved_activity } + involved_activity = { + OR = { + has_activity_type = activity_tournament + has_activity_type = activity_tour + has_activity_type = activity_wedding + } + } + } + trigger_else = { + always = no + } +} + +is_grand_activity_trigger = { + OR = { + has_activity_type = activity_tournament + has_activity_type = activity_tour + has_activity_type = activity_wedding + } +} + +tournament_contest_event_trigger = { + is_ai = no + is_in_guest_subset = { name = qualified } + exists = var:progress_to_victory + NOT = { has_character_flag = busy_in_contest_event } +} + +tournament_contest_versus_event_trigger = { + is_ai = no + exists = var:progress_to_victory + is_in_guest_subset = { name = qualified } + NOT = { has_character_flag = resigned_contest_flag } + save_temporary_scope_as = versus_event_scope + # Only fire events if the bout has not been pre-decided + involved_activity = { + switch = { + trigger = has_current_phase + tournament_phase_joust = { + scope:versus_event_scope = { + switch = { + trigger = involved_activity.var:contest_versus_progress + 0 = { exists = var:contest_qualified_match_joust.var:progress_to_victory } + 1 = { exists = var:contest_semi_finalist_match_joust.var:progress_to_victory } + 2 = { exists = var:contest_finalist_match_joust.var:progress_to_victory } + } + } + } + tournament_phase_duel = { + scope:versus_event_scope = { + switch = { + trigger = involved_activity.var:contest_versus_progress + 0 = { exists = var:contest_qualified_match_duel.var:progress_to_victory } + 1 = { exists = var:contest_semi_finalist_match_duel.var:progress_to_victory } + 2 = { exists = var:contest_finalist_match_duel.var:progress_to_victory } + } + } + } + tournament_phase_wrestling = { + scope:versus_event_scope = { + switch = { + trigger = involved_activity.var:contest_versus_progress + 0 = { exists = var:contest_qualified_match_wrestling.var:progress_to_victory } + 1 = { exists = var:contest_semi_finalist_match_wrestling.var:progress_to_victory } + 2 = { exists = var:contest_finalist_match_wrestling.var:progress_to_victory } + } + } + } + tournament_phase_board_game = { + scope:versus_event_scope = { + switch = { + trigger = involved_activity.var:contest_versus_progress + 0 = { exists = var:contest_qualified_match_board_game.var:progress_to_victory } + 1 = { exists = var:contest_semi_finalist_match_board_game.var:progress_to_victory } + 2 = { exists = var:contest_finalist_match_board_game.var:progress_to_victory } + } + } + } + } + } + +} + +tournament_contest_can_compete_trigger = { + exists = var:progress_to_victory + NOT = { + is_in_guest_subset = { name = qualified } + } + activity_is_valid_tournament_contestant = yes +} + +tournament_contest_can_compete_race_trigger = { + is_adult = yes + exists = var:progress_to_victory + OR = { + is_lowborn = no + AND = { + is_playable_character = yes + primary_title.tier >= tier_county + } + gold >= major_gold_value + } + NOT = { + is_in_guest_subset = { name = qualified } + } +} + +contest_team_enemy_member_exists_trigger = { + scope:activity = { + OR = { + is_in_guest_subset = { name = team_alpha } + is_in_guest_subset = { name = team_beta } + } + trigger_if = { + limit = { + is_in_guest_subset = { name = team_alpha } + } + any_guest_subset_current_phase = { + name = team_beta + is_alive = yes + is_ai = yes + } + } + trigger_else = { + any_guest_subset_current_phase = { + name = team_alpha + is_alive = yes + is_ai = yes + } + } + } +} + +tournament_pertinent_contestant_trigger = { + OR = { + root.var:contest_murder_attempt ?= this + has_any_good_relationship_with_character_trigger = { CHARACTER = root } + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + is_consort_of = root + is_close_family_of = root + AND = { + has_court_position = champion_court_position + liege = root + } + is_knight_of = root + AND = { + exists = root.house + house ?= root.house + } + root.var:tournament_wager_target ?= this + } +} + +tournament_is_knightly_entourage_character_trigger = { + is_knight = yes + is_playable_character = no + save_temporary_scope_as = char_temp + involved_activity = { + any_attending_character = { this = scope:char_temp.liege } + } +} + +would_want_to_attend_tournament = { + trigger_if = { + limit = { is_playable_character = yes } + NOR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_mercenary + government_has_flag = government_is_holy_order + } + } + trigger_else = { is_clergy = no } + OR = { + is_ai = no + has_trait = tourney_participant + has_trait = education_martial + has_trait = education_martial_prowess + has_trait = gregarious + has_trait = brave + prowess >= decent_skill_rating + has_court_position = champion_court_position + is_knight = yes + number_of_commander_traits >= 1 + has_any_scripted_relation = scope:inviter + } +} + +is_available_ai_adult_locale_person = { #to prevent bishops from being anything else than temple priests + is_available_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + is_clergy = no +} diff --git a/common/scripted_triggers/04_ep2_wedding_triggers.txt b/common/scripted_triggers/04_ep2_wedding_triggers.txt new file mode 100644 index 00000000..851aca12 --- /dev/null +++ b/common/scripted_triggers/04_ep2_wedding_triggers.txt @@ -0,0 +1,40 @@ +# OTHER_SPOUSE = the other spouse character, may be invalid object +is_valid_grand_wedding_special_guest_trigger = { + is_alive = yes + is_adult = yes + # Must be able to marry the other character if they are selected + trigger_if = { + limit = { exists = $OTHER_SPOUSE$ } + can_marry_character_trigger = { CHARACTER = $OTHER_SPOUSE$ } + } +} + +has_been_promised_grand_wedding = { + has_variable = promised_grand_wedding_by +} + +has_promised_a_grand_wedding = { + has_variable = promised_grand_wedding_marriage_countdown +} + +activity_wedding_is_valid_guest = { + age >= 3 + is_at_war = no + is_in_army = no + is_imprisoned = no + NOR = { + exists = involved_activity + has_trait = incapable + } +} + +activity_wedding_diplomatic_intent_impressible_target = { + is_independent_ruler = yes + any_neighboring_and_across_water_top_liege_realm_owner = { this = root } + highest_held_title_tier < root.highest_held_title_tier + NOT = { government_has_flag = cannot_be_vassal_or_liege } + is_at_war = no + save_temporary_scope_as = impress_check + impress_intent_vassalization_acceptance_value > -30 + scope:host ?= root +} diff --git a/common/scripted_triggers/05_bp2_hostage_triggers.txt b/common/scripted_triggers/05_bp2_hostage_triggers.txt new file mode 100644 index 00000000..f9c55941 --- /dev/null +++ b/common/scripted_triggers/05_bp2_hostage_triggers.txt @@ -0,0 +1,307 @@ + +################################################## +# Triggers related to the hostage system + +bp2_valid_to_offer_as_hostage_trigger = { + # Update if this is changed : offer_hostage_interaction_desc + + # Must not be a hostage already + is_hostage = no + # Cannot send self as hostage + NOT = { this = $SENDER$ } + # Must be under sender's control + liege ?= $SENDER$ + # Hostages must be landless and not a ruler + is_landed = no + is_landless_ruler = no + is_married = no + is_betrothed = no + # If imprisoned, it must be by sender + trigger_if = { + limit = { is_imprisoned = yes } + imprisoner = $SENDER$ + } + # Hostages must be very close relations of sender + OR = { + is_child_of = $SENDER$ + is_grandchild_of = $SENDER$ + is_sibling_of = $SENDER$ + is_nibling_of = $SENDER$ + } + # Not already offered and travelling + NOR = { + exists = var:hostage_travelling_to_warden + exists = var:guardian_travelling_to_ward + exists = var:ward_travelling_to_guardian + } + # You can't send your diarch away as a hostage. + custom_tooltip = { + text = hostage_cannot_offer_own_regent_tt + NOT = { this = $SENDER$.diarch } + } + trigger_if = { + limit = { exists = scope:war } + scope:war = { + custom_tooltip = { + text = hostage_exchange_invalid_for_crusade_tt + NOR = { + using_cb = undirected_great_holy_war + using_cb = directed_great_holy_war + } + } + custom_tooltip = { + text = hostage_exchange_invalid_for_cb_tt + bp2_hostage_exchange_invalid_cb_trigger = no + } + } + } +} + +bp2_valid_to_offer_hostage_ai_trigger = { + # AI only cares about neighbors + scope:recipient = { character_is_land_realm_neighbor = scope:actor } + # Don't waste hostages on those who aren't a threat + scope:recipient.current_military_strength >= scope:actor.fifty_percent_of_current_military_strength + scope:recipient = { has_any_cb_on = scope:actor } + # Don't send hostages to those you seriously hate, or vice versa + NOR = { + scope:recipient = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:actor } + } + scope:actor.house.house_head ?= { + any_owned_story = { + story_type = story_cycle_house_feud + var:house_feud_house ?= scope:recipient.house + } + } + } +} + +bp2_valid_to_demand_hostage_ai_trigger = { + # AI only cares about neighbors + scope:recipient = { character_is_land_realm_neighbor = scope:actor } + # Don't waste hostages on those who aren't a threat + scope:actor.current_military_strength >= scope:recipient.fifty_percent_of_current_military_strength + scope:actor = { has_any_cb_on = scope:recipient } + # Don't send hostages to those you seriously hate, or vice versa + NOR = { + scope:recipient = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:actor } + } + scope:actor.house.house_head = { + any_owned_story = { + story_type = story_cycle_house_feud + var:house_feud_house ?= scope:recipient.house + } + } + } +} + +bp2_valid_to_exchange_hostage_ai_trigger = { + # AI only cares about neighbors + scope:recipient = { character_is_land_realm_neighbor = scope:actor } + # Only exchange with similary strong + scope:actor.current_strength_with_allies_seventy_five_percent_value < scope:recipient.current_strength_with_allies_value + scope:recipient.current_strength_with_allies_seventy_five_percent_value < scope:actor.current_strength_with_allies_value + OR = { + scope:actor = { has_any_cb_on = scope:recipient } + scope:recipient = { has_any_cb_on = scope:actor } + } + # Don't send hostages to those you seriously hate, or vice versa + NOR = { + scope:recipient = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:actor } + } + scope:actor.house.house_head = { + any_owned_story = { + story_type = story_cycle_house_feud + var:house_feud_house ?= scope:recipient.house + } + } + } +} + +bp2_valid_hostage_action_shared_trigger = { + # Don't inform of unimportant cases + NOR = { + is_allied_to = root + is_consort_of = root + } +} + +bp2_valid_hostage_offer_action_trigger = { + # Context checks, e.g. alliance + bp2_valid_hostage_action_shared_trigger = yes + # Only care about actual threats + has_any_cb_on = root + save_temporary_scope_as = warden + # Does not already have your hostage + NOT = { + any_warden_hostage = { home_court = root } + } + root = { + # You have a hostage to offer + any_close_family_member = { + count >= 1 + bp2_valid_to_offer_as_hostage_trigger = { SENDER = root } + save_temporary_scope_as = my_hostage + } + # Ensure Offer might be accepted + is_character_interaction_potentially_accepted = { + interaction = offer_hostage_interaction + recipient = scope:warden + secondary_actor = scope:my_hostage + } + } + # Why Offer when you could Exchange? + trigger_if = { + limit = { + # Only if they don't have your hostage already + NOT = { + any_home_court_hostage = { warden = root } + } + any_close_family_member = { + bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:warden } + save_temporary_scope_as = their_hostage + } + } + NOT = { + root = { + is_character_interaction_potentially_accepted = { + interaction = exchange_hostage_interaction + recipient = scope:warden + secondary_recipient = scope:their_hostage + secondary_actor = scope:my_hostage + } + } + } + } +} + +bp2_valid_hostage_demand_action_trigger = { + # Context checks, e.g. alliance + bp2_valid_hostage_action_shared_trigger = yes save_temporary_scope_as = home_court + NOT = { + # Don't already have your hostage + any_home_court_hostage = { warden = root } + } + # Ensure a viable hostage exists + any_close_family_member = { + count >= 1 + bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:home_court } + save_temporary_scope_as = their_hostage + } + # Ensure Demand might be accepted + root = { + is_character_interaction_potentially_accepted = { + interaction = demand_hostage_interaction + recipient = scope:home_court + secondary_recipient = scope:their_hostage + } + } +} + +bp2_valid_hostage_exchange_action_trigger = { + # Context checks, e.g. alliance + bp2_valid_hostage_action_shared_trigger = yes + save_temporary_scope_as = home_court + # Must be at least some threat for an Exchange to be relevant + #current_strength_with_allies_value >= root.current_strength_with_allies_fifty_percent_value + NOR = { + # Don't already have their hostage + any_warden_hostage = { home_court = root } + # Don't already have your hostage + any_home_court_hostage = { warden = root } + } + # Ensure a viable target exists + any_close_family_member = { + count >= 1 + bp2_valid_to_offer_as_hostage_trigger = { SENDER = scope:home_court } + save_temporary_scope_as = their_hostage + } + root = { + # Why Exchange when you could Demand? + NOT = { + is_character_interaction_potentially_accepted = { + interaction = demand_hostage_interaction + recipient = scope:home_court + secondary_recipient = scope:their_hostage + } + } + any_close_family_member = { + bp2_valid_to_offer_as_hostage_trigger = { SENDER = root } + save_temporary_scope_as = my_hostage + } + # Ensure Exchange might be accepted + is_character_interaction_potentially_accepted = { + interaction = exchange_hostage_interaction + recipient = scope:home_court + secondary_recipient = scope:their_hostage + secondary_actor = scope:my_hostage + } + } +} + +bp2_valid_for_standard_interactions_trigger = { + # BP2 + is_hostage = no + custom_tooltip = { + text = hostage_travelling_tt + NOR = { + exists = var:hostage_travelling_to_warden + exists = var:ward_travelling_to_guardian + exists = var:guardian_travelling_to_ward + } + } +} + +bp2_hostage_benefits_valid_trigger = { + NAND = { + exists = scope:home_court.dynasty + exists = scope:warden.dynasty + scope:home_court.dynasty = scope:warden.dynasty + } +} + +bp2_warden_dynasty_renown_lower_trigger = { + exists = $HOME_COURT$.dynasty + exists = $WARDEN$.dynasty + $WARDEN$.dynasty.dynasty_prestige_level < $HOME_COURT$.dynasty.dynasty_prestige_level +} + +bp2_warden_title_tier_lower_trigger = { + exists = $HOME_COURT$.primary_title + exists = $WARDEN$.primary_title + $WARDEN$.primary_title.tier < $HOME_COURT$.primary_title.tier +} + +bp2_warden_prestige_level_lower_trigger = { + exists = $HOME_COURT$ + exists = $WARDEN$ + $WARDEN$.prestige_level < $HOME_COURT$.prestige_level +} + +bp2_hostage_exchange_invalid_cb_trigger = { + OR = { + using_cb = flowery_war_cb + using_cb = excommunication_war + using_cb = fp2_border_raid + using_cb = fp2_expel_interloper + using_cb = artifact_war + using_cb = reclaim_relic_artifact_war + using_cb = diarch_vassalisation_cb + using_cb = remove_regent_cb + using_cb = independence_faction_war + using_cb = liberty_faction_war + using_cb = populist_war + using_cb = claimant_faction_war + using_cb = depose_war + using_cb = refused_liege_demand_war + using_cb = independence_war + using_cb = nation_fracturing_faction_war + using_cb = invasion_war + using_cb = norwegian_invasion_cb + using_cb = norman_conquest_cb + using_cb = sons_of_lothbrok_invasion_cb + } +} diff --git a/common/scripted_triggers/05_bp2_scripted_triggers.txt b/common/scripted_triggers/05_bp2_scripted_triggers.txt new file mode 100644 index 00000000..186eae8a --- /dev/null +++ b/common/scripted_triggers/05_bp2_scripted_triggers.txt @@ -0,0 +1,55 @@ +################################################# +# TRIGGER LIST # +################################################# +# has_same_wet_nurse_trigger - Check 2 characters if they have the same wet nurse, uses SCOPE and OTHER_SCOPE as the 2 character you want to check for having the same nurse + +has_same_wet_nurse_trigger = { + $SCOPE$ = { + any_relation = { + type = wet_nurse + even_if_dead = yes + save_temporary_scope_as = wet_nurse_temp + } + } + $OTHER_SCOPE$ = { + any_relation = { + type = wet_nurse + even_if_dead = yes + save_temporary_scope_as = other_wet_nurse_temp + } + } + + trigger_if = { + limit = { + AND = { + exists = scope:wet_nurse_temp + exists = scope:other_wet_nurse_temp + } + } + scope:wet_nurse_temp = scope:other_wet_nurse_temp + } + trigger_else = { + always = no + } +} + +character_can_rites_of_passage_trigger = { + OR = { + AND = { + is_adult = no + age >= 12 + custom_description = { + text = rites_of_passage_trigger_not_proven + NOT = { + any_memory = { + has_memory_type = completed_rites_of_passage + } + } + } + } + custom_description = { + text = rites_of_passage_trigger_delayed + has_character_flag = unproven_adult_flag + } + } +} \ No newline at end of file diff --git a/common/scripted_triggers/05_bp2_triggers.txt b/common/scripted_triggers/05_bp2_triggers.txt new file mode 100644 index 00000000..540de9ed --- /dev/null +++ b/common/scripted_triggers/05_bp2_triggers.txt @@ -0,0 +1,87 @@ +#Adult Education Activity +is_higher_studies_location = { + OR = { + has_university_building_trigger = yes + is_religious_studies_location = yes + } +} + +is_religious_studies_location = { + OR = { + has_building_or_higher = holy_site_cathedral_01 + has_building_or_higher = holy_site_mosque_01 + has_building_or_higher = holy_site_pagan_grand_temple_01 + has_building_or_higher = holy_site_indian_grand_temple_01 + has_building_or_higher = holy_site_other_grand_temple_01 + has_building_or_higher = holy_site_mahabodhi_temple_01 + has_building_or_higher = brihadeeswarar_temple_01 + has_building_or_higher = holy_site_cologne_cathedral_01 + has_building_or_higher = holy_site_canterbury_cathedral_01 + has_building_or_higher = temple_of_uppsala_01 + has_building_or_higher = lund_cathedral_01 + has_building_or_higher = notre_dame_01 + has_building_or_higher = holy_site_imam_ali_mosque_01 + has_building_or_higher = holy_site_great_mosque_of_mecca_01 + has_building_or_higher = holy_site_great_mosque_of_cordoba_01 + has_building_or_higher = holy_site_great_mosque_of_djenne_01 + has_building_or_higher = holy_site_great_mosque_of_samarra_01 + has_building_or_higher = holy_site_prophetic_mosque_01 + has_building_or_higher = shwedagon_pagoda_01 + has_building_or_higher = ananda_temple_01 + has_building_or_higher = the_friday_mosque_01 + has_building_or_higher = khajuraho_01 + has_building_or_higher = hagia_sophia_01 + has_building_or_higher = temple_in_jerusalem_01 + has_building_or_higher = holy_site_basilica_santiago_01 + has_building_or_higher = imam_reza_shrine_01 + has_building_or_higher = cluny_abbey_01 + has_building_or_higher = damascus_mosque_01 + has_building_or_higher = jokhang_01 + has_building_or_higher = holy_wisdom_01 + has_building_or_higher = duomo_florence_01 + has_building_or_higher = konark_temple_01 + has_building_or_higher = wawel_cathedral_01 + has_building_or_higher = vatapi_caves_01 + has_building_or_higher = al_qarawiyyin_university_01 + has_building_or_higher = somapura_university_01 + } +} + +is_available_adult_education_teacher = { + is_available_healthy_ai_adult = yes + age > 35 + OR = { + has_trait = education_diplomacy_4 + has_trait = education_martial_4 + has_trait = education_stewardship_4 + has_trait = education_intrigue_4 + has_trait = education_learning_4 + has_trait = education_diplomacy_5 + has_trait = education_martial_5 + has_trait = education_stewardship_5 + has_trait = education_intrigue_5 + has_trait = education_learning_5 + } + OR = { + diplomacy >= 12 + martial >= 12 + stewardship >= 12 + intrigue >= 12 + learning >= 12 + } + trigger_if = { + limit = { + scope:location.county.faith = { has_doctrine = doctrine_gender_female_dominated } + } + is_female = yes + } + trigger_else_if = { + limit = { + scope:location.county.faith = { has_doctrine = doctrine_gender_male_dominated } + } + is_female = no + } + trigger_else = { + always = yes + } +} diff --git a/common/scripted_triggers/06_bp3_triggers.txt b/common/scripted_triggers/06_bp3_triggers.txt new file mode 100644 index 00000000..4cb37db8 --- /dev/null +++ b/common/scripted_triggers/06_bp3_triggers.txt @@ -0,0 +1,218 @@ +wayfarer_the_real_threat_trigger = { + is_councillor_of = root + is_ai = yes + opinion = { + target = root + value < 10 + } +} + +# Used to keep track of mines found after our time period, so they have a higher chance to spawn for the Inspection event, particularly in Norway +later_historical_gold_mine_trigger = { + OR = { + this = province:1705 # Kildonan Gold Rush, 1869 + this = province:1665 # Dolgellau Gold Rush, Mid-19th century + } +} + +later_historical_silver_mine_trigger = { + OR = { + this = province:248 # Kongsberg, 1623 + this = province:346 # Sala, 15th century + } +} + +later_historical_copper_mine_trigger = { + OR = { + this = province:241 # Røros, 1645 + } +} + +reminiscing_event_trigger = { + is_ai = no + has_variable = reminiscing_location + var:reminiscing_location = root.location +} + +local_guild_trigger = { + OR = { + has_building_or_higher = watermills_01 + has_building_or_higher = windmills_01 + has_building_or_higher = common_tradeport_01 + has_building_or_higher = pastures_01 + has_building_or_higher = hunting_grounds_01 + has_building_or_higher = orchards_01 + has_building_or_higher = logging_camps_01 + has_building_or_higher = quarries_01 + has_building_or_higher = smiths_01 + has_building_or_higher = stables_01 + has_building_or_higher = guild_halls_01 + has_building_or_higher = hospices_01 + has_building_or_higher = workshops_01 + } +} + +local_guild_compare_trigger = { + switch = { + trigger = scope:local_guild_scope + 1 = { + NOT = { has_building_or_higher = watermills_01 } + building_watermills_requirement_terrain = yes + } + 2 = { + NOT = { has_building_or_higher = windmills_01 } + building_windmills_requirement_terrain = yes + } + 3 = { + NOT = { has_building_or_higher = common_tradeport_01 } + building_common_tradeport_requirement_terrain = yes + } + 4 = { + NOT = { has_building_or_higher = pastures_01 } + building_pastures_requirement_terrain = yes + } + 5 = { + NOT = { has_building_or_higher = pastures_01 } + building_pastures_requirement_terrain = yes + } + 6 = { + NOT = { has_building_or_higher = pastures_01 } + building_pastures_requirement_terrain = yes + } + 7 = { + NOT = { has_building_or_higher = pastures_01 } + building_pastures_requirement_terrain = yes + } + 8 = { + NOT = { has_building_or_higher = hunting_grounds_01 } + building_hunting_grounds_requirement_terrain = yes + } + 9 = { + NOT = { has_building_or_higher = hunting_grounds_01 } + building_hunting_grounds_requirement_terrain = yes + } + 10 = { + NOT = { has_building_or_higher = hunting_grounds_01 } + building_hunting_grounds_requirement_terrain = yes + } + 11 = { + NOT = { has_building_or_higher = orchards_01 } + building_orchards_requirement_terrain = yes + } + 12 = { + NOT = { has_building_or_higher = logging_camps_01 } + building_logging_camps_requirement_terrain = yes + } + 13 = { + NOT = { has_building_or_higher = quarries_01 } + building_quarries_requirement_terrain = yes + } + 14 = { + NOT = { has_building_or_higher = quarries_01 } + building_quarries_requirement_terrain = yes + } + 15 = { + NOT = { has_building_or_higher = smiths_01 } + building_smiths_requirement_terrain = yes + } + 16 = { + NOT = { has_building_or_higher = stables_01 } + building_stables_requirement_terrain = yes + } + 17 = { + NOT = { has_building_or_higher = guild_halls_01 } + has_building_or_higher = city_01 + } + 18 = { + NOT = { has_building_or_higher = hospices_01 } + } + 19 = { + NOT = { has_building_or_higher = hospices_01 } + } + 20 = { + NOT = { has_building_or_higher = workshops_01 } + building_workshops_requirement_terrain = yes + } + } +} + +landless_inspector_terrain_knowing_the_land_trigger = { + trigger_if = { + limit = { + OR = { + terrain = forest + terrain = jungle + terrain = taiga + terrain = wetlands + } + } + landless_inspector_terrain_master_trigger = { TERRAIN = woodlands } + } + trigger_if = { + limit = { + OR = { + terrain = mountains + terrain = hills + terrain = desert_mountains + } + } + landless_inspector_terrain_master_trigger = { TERRAIN = highlands } + } + trigger_if = { + limit = { + OR = { + terrain = plains + terrain = steppe + terrain = farmlands + terrain = floodplains + } + } + landless_inspector_terrain_master_trigger = { TERRAIN = lowlands } + } + trigger_if = { + limit = { + OR = { + terrain = desert + terrain = oasis + terrain = drylands + } + } + landless_inspector_terrain_master_trigger = { TERRAIN = drylands } + } +} + +landless_inspector_terrain_master_trigger = { + root = { + OR = { + has_character_modifier = landless_inspector_$TERRAIN$_tier_1_modifier + has_character_modifier = landless_inspector_$TERRAIN$_tier_2_modifier + has_character_modifier = nomadic_inspector_$TERRAIN$_tier_2_modifier + has_character_modifier = landless_inspector_$TERRAIN$_tier_3_modifier + has_character_modifier = nomadic_inspector_$TERRAIN$_tier_3_modifier + } + } +} + +landless_inspector_king_of_the_wilds = { + switch = { + trigger = has_character_modifier + # Woodlands + master_terrain_forest_modifier = { root.location ?= { terrain = forest } } + master_terrain_jungle_modifier = { root.location ?= { terrain = jungle } } + master_terrain_taiga_modifier = { root.location ?= { terrain = taiga } } + master_terrain_wetlands_modifier = { root.location ?= { terrain = wetlands } } + # Highlands + master_terrain_mountains_modifier = { root.location ?= { terrain = mountains } } + master_terrain_hills_modifier = { root.location ?= { terrain = hills } } + master_terrain_desert_mountains_modifier = { root.location ?= { terrain = desert_mountains } } + # Lowlands + master_terrain_plains_modifier = { root.location ?= { terrain = plains } } + master_terrain_steppe_modifier = { root.location ?= { terrain = steppe } } + master_terrain_farmlands_modifier = { root.location ?= { terrain = farmlands } } + master_terrain_floodplains_modifier = { root.location ?= { terrain = floodplains } } + # Drylands + master_terrain_drylands_modifier = { root.location ?= { terrain = drylands } } + master_terrain_desert_modifier = { root.location ?= { terrain = desert } } + master_terrain_oasis_modifier = { root.location ?= { terrain = oasis } } + } +} diff --git a/common/scripted_triggers/06_ce1_epidemic_triggers.txt b/common/scripted_triggers/06_ce1_epidemic_triggers.txt new file mode 100644 index 00000000..c31e8411 --- /dev/null +++ b/common/scripted_triggers/06_ce1_epidemic_triggers.txt @@ -0,0 +1,43 @@ +#would_follow_social_distancing_trigger +#realm_has_any_epidemic +#notified_of_plague_trigger + +would_follow_social_distancing_trigger = { + would_follow_social_distancing_value >= 0 +} + +realm_has_any_epidemic = { + any_sub_realm_county = { + count >= $SIZE$ + any_county_province = { + any_province_epidemic = { + outbreak_intensity >= $INTENSITY$ + } + } + } +} + +realm_has_any_nearby_epidemic = { + any_sub_realm_county = { + count >= $SIZE$ + any_county_province = { + OR = { + county.holder = root + squared_distance = { + target = root.capital_province + value <= squared_distance_medium #250 map-pixels. Roughly one Ireland away (top to bottom). + } + } + any_province_epidemic = { + outbreak_intensity >= $INTENSITY$ + } + } + } +} + +notified_of_plague_trigger = { + is_target_in_variable_list = { + name = plagues_notified + target = scope:epidemic + } +} \ No newline at end of file diff --git a/common/scripted_triggers/06_ce1_legend_triggers.txt b/common/scripted_triggers/06_ce1_legend_triggers.txt new file mode 100644 index 00000000..f2376528 --- /dev/null +++ b/common/scripted_triggers/06_ce1_legend_triggers.txt @@ -0,0 +1,116 @@ +#is_standard_legend_spreading_courtier +#has_access_to_legitimizing_seeds +#has_legend_chapter_trigger - checks if you own a legend + +is_standard_legend_spreading_courtier = { + NOT = { this = root } + NOT = { this = root.promoted_legend.legend_protagonist } + NOT = { is_spouse_of = root } + NOT = { is_child_of = root } + is_available_ai_adult = yes +} + +locale_valid_for_legendary_buildings = { + scope:location ?= { + OR = { + province_owner = root + province_owner.top_liege = root + } + has_special_building_slot = no + } + +} + +valid_for_legendary_integration_k = { + save_temporary_scope_as = title_to_check + OR = { + custom_tooltip = { + text = control_the_entirity_of_title_tt + AND = { + de_jure_drift_progress = { + target = root.primary_title + value > 0 + } + root = { completely_controls = scope:title_to_check } + } + } + holder = root + } + custom_tooltip = { + text = not_already_de_jure_your_title_tt + NOR = { + this = root.primary_title + root.primary_title = { + is_de_jure_liege_or_above_target = scope:title_to_check + } + } + } +} + +valid_for_legendary_integration_d = { + OR = { + de_jure_drift_progress = { + target = root.primary_title + value > 0 + } + kingdom ?= { + de_jure_drift_progress = { + target = root.primary_title + value > 0 + } + } + holder = root + } + NOR = { + kingdom ?= root.primary_title + empire ?= root.primary_title + } +} + +has_legend_chapter_trigger = { + has_dlc_feature = legends + exists = promoted_legend + promoted_legend.legend_owner = root + promoted_legend = { + has_legend_chapter = $CHAPTER$ + } +} + +has_legend_chapter_winner_trigger = { + has_dlc_feature = legends + exists = promoted_legend + promoted_legend.legend_owner = scope:winner + promoted_legend = { + has_legend_chapter = $CHAPTER$ + } +} + +has_any_point_of_interest_flag = { + OR = { + has_building_with_flag = { + flag = travel_point_of_interest_martial + } + has_building_with_flag = { + flag = travel_point_of_interest_martial_minor + } + has_building_with_flag = { + flag = travel_point_of_interest_religious + } + has_building_with_flag = { + flag = travel_point_of_interest_diplomatic + } + has_building_with_flag = { + flag = travel_point_of_interest_wonder + } + has_building_with_flag = { + flag = travel_point_of_interest_economic + } + has_building_with_flag = { + flag = travel_point_of_interest_learning + } + has_building_with_flag = { + flag = travel_point_of_interest_natural_feature + } + } +} + diff --git a/common/scripted_triggers/06_ce1_legitimacy_triggers.txt b/common/scripted_triggers/06_ce1_legitimacy_triggers.txt new file mode 100644 index 00000000..068e1c53 --- /dev/null +++ b/common/scripted_triggers/06_ce1_legitimacy_triggers.txt @@ -0,0 +1,30 @@ +###################### +# Legitimacy +###################### + +#is_valid_for_legitimacy_change +#has_nomadic_legitimacy +#is_valid_for_nomadic_legitimacy_change + +is_valid_for_legitimacy_change = { + has_legitimacy = yes + is_alive = yes + is_landed = yes + is_ruler = yes + exists = dynasty + highest_held_title_tier >= tier_county + NOR = { + government_has_flag = government_is_theocracy + government_has_flag = government_is_special_republic + } +} + +has_nomadic_legitimacy = { + has_legitimacy = yes + government_has_flag = government_is_nomadic +} + +is_valid_for_nomadic_legitimacy_change = { + is_valid_for_legitimacy_change = yes + government_has_flag = government_is_nomadic +} \ No newline at end of file diff --git a/common/scripted_triggers/06_fp3_scripted_triggers.txt b/common/scripted_triggers/06_fp3_scripted_triggers.txt new file mode 100644 index 00000000..bc3ed3ed --- /dev/null +++ b/common/scripted_triggers/06_fp3_scripted_triggers.txt @@ -0,0 +1,480 @@ +fp3_should_use_iranian_graphics_trigger = { + culture = { has_building_gfx = iranian_building_gfx } +} + +eligible_for_fp3_khvarenah_legacy_trigger = { + has_fp3_dlc_trigger = yes + dynasty = { + OR = { + dynast = { + culture = { + OR = { + has_cultural_pillar = heritage_iranian + any_parent_culture_or_above = { + has_cultural_pillar = heritage_iranian + } + } + } + } + has_dynasty_perk = fp3_khvarenah_legacy_1 + } + } +} + +fp3_warrior_culture_trigger = { + AND = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_tradition = tradition_swords_for_hire + } + OR = { + has_cultural_pillar = heritage_iranian + has_cultural_pillar = heritage_arabic + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_tocharian + } + } +} + +fp3_custom_divinity_for_zoroastrianism_faiths = { + OR = { + faith.religion = faith:mazdayasna.religion + faith.religion = faith:gayomarthianism.religion + faith.religion = faith:khurmazta.religion + faith.religion = faith:zurvanism.religion + faith.religion = faith:urartuism.religion + faith.religion = faith:mazdakism.religion + faith.religion = faith:khurramism.religion + } +} + +fp3_sufism_enthusiast_trigger = { + has_religion = religion:islam_religion + learning > good_skill_level + OR = { + faith = { has_doctrine = tenet_esotericism } + faith = { has_doctrine_parameter = meditation_mechanics_active } + has_character_modifier = hallucinogenic_visions_uplifting_modifier + has_character_modifier = cosmic_insights_modifier + has_character_modifier = fp3_sufi_initiate_modifier + has_character_modifier = foreboding_visions_modifier + has_character_modifier = mysterious_prophetess_illness_modifier + learning >= excellent_skill_level + } +} + +# Used for speeding-up debug. Has little to no impact on performance, does not cause errors, or affect player experience. +is_developer_testing_trigger = { + is_ai = no + debug_only = yes + has_multiple_players = no +} + +fp3_will_remain_in_caliphate_regardless_of_takeover = { + OR = { + opinion = { # They must either not hate you + target = scope:struggle_ender + value > -29 + } + opinion = { # Or really want to stay by the side of the caliph + target = scope:struggle_liege + value > 54 + } + } +} + +fp3_eligible_for_yearly_events_trigger = { + has_fp3_dlc_trigger = yes + OR = { + culture = { has_cultural_pillar = heritage_iranian } + culture = { has_cultural_pillar = heritage_turkic } + culture = { has_cultural_pillar = heritage_mongolic } + culture = { has_cultural_pillar = heritage_arabic } + } + any_realm_county = { # Most events are geographical in nature + any_county_province = { geographical_region = world_persian_empire } + } +} + +fp3_is_valid_futuwaa_member = { + $SPONSOR$.capital_province ?= { this = prev.location } # Prevents error log errors from dumbo AI + is_ai = yes + age > 12 + age < 25 + is_married = no + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $SPONSOR$ } +} + +fp3_is_valid_madrasa_pupil = { + $SPONSOR$.capital_province ?= { this = prev.location } # Prevents error log errors from dumbo AI + is_ai = yes + age > 8 + age < 16 + NOT = { has_character_flag = studying_at_university } + #Gender rules + OR = { + $SPONSOR$ = { has_realm_law = equal_law } + AND = { + $SPONSOR$ = { + OR = { + has_realm_law = female_only_law + has_realm_law = female_preference_law + } + } + is_female = yes + } + AND = { + $SPONSOR$ = { + OR = { + has_realm_law = male_only_law + has_realm_law = male_preference_law + } + } + is_male = yes + } + } +} + +fp3_valid_shia_head = { + calc_true_if = { + amount >= 2 + + # Sayyids get a free pass. + has_trait = sayyid + # The wise get a free pass. + has_trait = lifestyle_mystic + piety_level >= very_high_piety_level + # Having many faithful counties. + custom_description = { + text = claim_the_imamate_decision.need_at_least_fifteen_same_faith_counties + any_sub_realm_county = { + count >= claim_the_imamate_decision_same_faith_greater_county_count + faith = root.faith + } + } + # Ancient Authority legacy. + dynasty ?= { has_dynasty_perk = fp3_khvarenah_legacy_4 } + } +} + +fp3_valid_muhakkima_head = { + calc_true_if = { + amount >= 2 + + # Sayyids get a free pass. + has_trait = sayyid + piety_level >= very_high_piety_level + # Having many faithful counties + custom_description = { + text = claim_the_imamate_decision.need_at_least_fifteen_same_faith_counties + any_sub_realm_county = { + count >= claim_the_imamate_decision_same_faith_greater_county_count + faith = root.faith + } + } + # Famed + prestige_level >= 4 + # #Muhakkima cares about justified warfare - and a justified cause. + OR = { + has_trait = faith_warrior #mujahid really + has_trait = theologian + } + } +} + +fp3_does_this_player_care_about_the_persian_struggle = { + save_temporary_scope_as = char_temp + OR = { + capital_province ?= { + OR = { # Is in region + geographical_region = world_middle_east_persia + geographical_region = world_africa_north_east + } + } + struggle:persian_struggle = { is_culture_involved_in_struggle = scope:char_temp.culture } + struggle:persian_struggle = { is_faith_involved_in_struggle = scope:char_temp.faith } + # Ping islamic and zoroastrian players as they might be interested + religion = religion:islam_religion + religion = religion:zoroastrianism_religion + fp3_character_involved_in_struggle_trigger = yes + fp3_character_interloper_in_struggle_trigger = yes + } +} + +fp3_reward_from_vassalization_ending = { + has_fp3_dlc_trigger = yes + + # Only available when the vassalization happened + exists = global_var:fp3_struggle_ending + global_var:fp3_struggle_ending = flag:fp3_struggle_vassalize_caliph_ending + + #need to be the liege of the caliph or from their House + + scope:recipient = { + any_held_title = { + this = title:d_sunni + } + } + + scope:actor.house ?= scope:recipient.top_liege.house +} + +fp3_struggle_involves_one_supporter_and_one_detractor = { + OR = { + AND = { + $FIRST$ = { has_trait = fp3_struggle_detractor } + $SECOND$ = { has_trait = fp3_struggle_supporter } + } + AND = { + $FIRST$ = { has_trait = fp3_struggle_supporter } + $SECOND$ = { has_trait = fp3_struggle_detractor } + } + } +} + +fp3_struggle_scoped_is_the_arabian_caliph_trigger = { + OR = { + has_title = title:e_arabia + has_title = title:d_sunni + } +} + +fp3_fortress_of_faith_county_trigger = { + faith = { save_temporary_scope_as = compare_faith } + root.faith = { + faith_hostility_level = { + target = scope:compare_faith + value < faith_evil_level + } + } +} + +fp3_is_valid_loyal_puppet = { # Install a suitable lackey to do your bidding + has_trait = fp3_struggle_supporter + # Can't be friends w/liege or indebted to them + liege ?= { + NOR = { + has_relation_friend = prev + has_hook = prev + } + } + primary_title.tier >= tier_county # We don't want to promote baron to avoid having Republic or Theocracies realms +} + +fp3_proper_gender_for_dynastic_ambition_trigger = { + OR = { #checking for appropriate gender + AND = { + root = { + OR = { + has_realm_law = male_preference_law + has_realm_law = male_only_law + } + } + is_male = yes + } + AND = { + root = { + OR = { + has_realm_law = female_preference_law + has_realm_law = female_only_law + } + } + is_female = yes + } + AND = { + root = { has_realm_law = equal_law } + OR = { + is_female = yes + is_male = yes + } + } + } +} + +fp3_character_any_involvement_persian_struggle_trigger = { + has_fp3_dlc_trigger = yes + OR = { + fp3_character_involved_in_struggle_trigger = yes + fp3_character_interloper_in_struggle_trigger = yes + } +} + +fp3_character_involved_in_struggle_trigger = { + has_fp3_dlc_trigger = yes + any_character_struggle = { + involvement = involved + is_struggle_type = persian_struggle + } +} + +fp3_character_interloper_in_struggle_trigger = { + has_fp3_dlc_trigger = yes + any_character_struggle = { + involvement = interloper + is_struggle_type = persian_struggle + } +} + +fp3_character_uninvolved_in_struggle_trigger = { + has_fp3_dlc_trigger = yes + exists = struggle:persian_struggle + fp3_character_interloper_in_struggle_trigger = no + fp3_character_involved_in_struggle_trigger = no +} + +fp3_struggle_is_the_caliph = { + AND = { + any_held_title = { + this = title:d_sunni + } + any_held_title = { + this = title:e_arabia + } + } +} + +fp3_embellish_capital_decision_character_trigger = { + is_capable_adult_ai = yes + is_imprisoned = no + is_healthy = yes + NOR = { + has_relation_rival = root + is_vassal_of = root + } +} + +fp3_name_read_in_friday_prayer_decision_liege_requirements_trigger = { + OR = { + is_independent_ruler = yes + custom_description = { + text = name_read_in_friday_prayer_crown_authority + is_independent_ruler = no + liege ?= { has_realm_law = crown_authority_0 } + } + AND = { + has_trait = fp3_struggle_detractor + liege = { has_title = title:d_sunni } + } + # We have to trigger_if this for tooltip reasons. + trigger_if = { + limit = { is_independent_ruler = no } + liege = { government_has_flag = government_is_tribal } + } + } +} + +favour_skilled_outsiders_decision_valid_character_to_take_trigger = { + OR = { + has_perk = meritocracy_perk + government_has_flag = government_is_clan + culture = { has_cultural_pillar = ethos_egalitarian } + calc_true_if = { + amount >= 2 + has_trait = calm + has_trait = humble + has_trait = ambitious + } + } +} + +favour_skilled_outsiders_decision_valid_county_to_generate_trigger = { + culture = { + # We don't technically need a custom tooltip for this, but the formatting looks much nicer. + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.not_share_your_heritage + NOT = { has_same_culture_heritage = root.culture } + } + trigger_if = { + limit = { exists = root.cp:councillor_chancellor } + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.not_share_chancellor_heritage + NOT = { has_same_culture_heritage = root.cp:councillor_chancellor.culture } + } + } + trigger_if = { + limit = { exists = root.cp:councillor_marshal } + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.not_share_marshal_heritage + NOT = { has_same_culture_heritage = root.cp:councillor_marshal.culture } + } + } + trigger_if = { + limit = { exists = root.cp:councillor_steward } + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.not_share_steward_heritage + NOT = { has_same_culture_heritage = root.cp:councillor_steward.culture } + } + } + trigger_if = { + limit = { exists = root.cp:councillor_spymaster } + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.not_share_spymaster_heritage + NOT = { has_same_culture_heritage = root.cp:councillor_spymaster.culture } + } + } + trigger_if = { + limit = { exists = root.cp:councillor_court_chaplain } + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.not_share_court_chaplain_heritage + NOT = { has_same_culture_heritage = root.cp:councillor_court_chaplain.culture } + } + } + trigger_if = { + limit = { + root = { is_independent_ruler = no } + } + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.not_share_liege_heritage + save_temporary_scope_as = culture_temp + NOT = { + root = { + any_liege_or_above = { + culture = { has_same_culture_heritage = scope:culture_temp } + } + } + } + } + } + } +} + +favour_skilled_outsiders_decision_grab_courtlies_trigger = { + OR = { + NOT = { exists = scope:outsider_select } + NOT = { + culture = { has_same_culture_heritage = scope:outsider_select.culture } + } + } + has_vassal_stance = courtly +} + +favour_skilled_outsiders_decision_grab_landless_councillors_trigger = { + OR = { + NOT = { exists = scope:outsider_select } + NOT = { + culture = { has_same_culture_heritage = scope:outsider_select.culture } + } + } + is_landed = no +} + +favour_skilled_outsiders_decision_non_courtlies_trigger = { + OR = { + NOT = { exists = scope:outsider_select } + NOT = { + culture = { has_same_culture_heritage = scope:outsider_select.culture } + } + } + NOT = { has_vassal_stance = courtly } +} + +has_clan_succession_law = { + is_ruler = yes + OR = { + has_realm_law = clan_antagonistic_partition_succession_law + has_realm_law = clan_competitive_partition_succession_law + has_realm_law = clan_impassive_partition_succession_law + has_realm_law = clan_friendly_partition_succession_law + has_realm_law = clan_harmonious_partition_succession_law + } +} diff --git a/common/scripted_triggers/07_ep3_petition_triggers.txt b/common/scripted_triggers/07_ep3_petition_triggers.txt new file mode 100644 index 00000000..d7160c63 --- /dev/null +++ b/common/scripted_triggers/07_ep3_petition_triggers.txt @@ -0,0 +1,100 @@ +petition_liege_council_seat_trigger = { + is_councillor = no + $HOUSE$ = house + OR = { + can_be_chancellor_trigger = { COURT_OWNER = $LIEGE$ } + can_be_steward_trigger = { COURT_OWNER = $LIEGE$ } + can_be_marshal_trigger = { COURT_OWNER = $LIEGE$ } + can_be_spymaster_trigger = { COURT_OWNER = $LIEGE$ } + can_be_court_chaplain_trigger = { COURT_OWNER = $LIEGE$ } + } +} + +petition_liege_council_seat_family_trigger = { + is_house_head = yes + any_courtier = { + is_available_healthy_ai_adult = yes + petition_liege_council_seat_trigger = { HOUSE = $HOUSE$ LIEGE = $LIEGE$ } + } +} + +petition_liege_court_position_trigger = { + has_any_court_position = no + house = $HOUSE$ +} + +petition_liege_court_position_family_trigger = { + is_house_head = yes + any_courtier = { + is_available_healthy_ai_adult = yes + petition_liege_court_position_trigger = { HOUSE = $HOUSE$ } + } +} + +petition_liege_governorship_trigger = { + liege = { + save_temporary_scope_as = liege_temp + any_held_title = { + petition_liege_governorship_duchy_request = { LIEGE = scope:liege_temp } + } + } +} + +petition_liege_governorship_family_trigger = { + is_house_head = yes + petition_liege_governorship_trigger = yes + petition_liege_governorship_family_count_trigger = yes + petition_liege_governorship_family_valid_trigger = yes +} + +petition_liege_governorship_family_count_trigger = { + house = { + any_house_member = { + count < 3 + is_landed = yes + liege = root.liege + } + } +} + +petition_liege_governorship_family_valid_trigger = { + house = { + any_house_member = { + is_landed = no + is_adult = yes + liege = root + can_be_granted_titles_by = { RULER = root.liege } + } + } +} + +petition_liege_house_governorship_rights_trigger = { + is_governor = yes + custom_tooltip = { + text = petition_liege_house_governorship_rights_valid_tt + NOT = { exists = primary_title.var:petition_house_rights } + } +} + +petition_liege_admin_valid_trigger = { + government_has_flag = government_is_administrative + liege = { government_has_flag = government_is_administrative } +} + +petition_liege_governorship_county_request = { + tier = tier_county + NOT = { this = $LIEGE$.capital_county } +} + +petition_liege_governorship_duchy_request = { + tier = tier_duchy + is_noble_family_title = no + is_landless_type_title = no + NOT = { $LIEGE$.capital_county.duchy = this } +} + +petition_liege_governorship_kingdom_request = { + tier = tier_kingdom + is_landless_type_title = no + NOT = { $LIEGE$.capital_county.kingdom = this } +} diff --git a/common/scripted_triggers/07_ep3_triggers.txt b/common/scripted_triggers/07_ep3_triggers.txt index fc4fc6d8..ed376469 100644 --- a/common/scripted_triggers/07_ep3_triggers.txt +++ b/common/scripted_triggers/07_ep3_triggers.txt @@ -88,14 +88,14 @@ ep3_varangian_trigger = { } is_competing_for_same_title_as = { - has_government = administrative_government + government_has_flag = government_is_administrative any_heir_title = { exists = this is_noble_family_title = no save_temporary_scope_as = temp_title } $CHARACTER$ = { - has_government = administrative_government + government_has_flag = government_is_administrative } scope:temp_title = { any_title_heir = { @@ -129,6 +129,10 @@ restore_greece_decision_county_trigger = { } any_valid_title_to_grant_trigger = { + # IMPORTANT! + # The is_valid_showing_failures_only of support_candidacy_interaction doesn't use this + # It uses a cloned version that has been optimized for AI usage + # Please update that one too if you're updating this one $CANDIDATE$ ?= { save_temporary_scope_as = candidate_temp custom_tooltip = { @@ -155,13 +159,9 @@ any_valid_candidacy_trigger = { limit = { $TOP_LIEGE$ = { OR = { - has_realm_law = acclamation_succession_law - has_realm_law = appointment_succession_law + has_realm_law_flag = appointment_type_succession primary_title = { - OR = { - has_title_law = acclamation_succession_law - has_title_law = appointment_succession_law - } + has_title_law_flag = appointment_type_succession } } } @@ -178,13 +178,9 @@ any_valid_candidacy_trigger = { exists = holder tier >= tier_duchy OR = { - has_title_law = acclamation_succession_law - has_title_law = appointment_succession_law + has_title_law_flag = appointment_type_succession holder = { - OR = { - has_realm_law = acclamation_succession_law - has_realm_law = appointment_succession_law - } + has_realm_law_flag = appointment_type_succession } } save_temporary_scope_as = title_temp @@ -232,7 +228,7 @@ is_candidate_for_title_trigger = { } valid_governor_contract_trigger = { - has_government = administrative_government + government_has_flag = government_is_administrative is_alive = yes is_adult = yes is_incapable = no @@ -677,7 +673,6 @@ ep3_castration_male_family_trigger = { ep3_castration_interest_trigger = { OR = { is_landless_ruler = yes - is_lowborn = yes highest_held_title_tier <= tier_county AND = { is_landed = yes @@ -749,7 +744,7 @@ ep3_ai_castration_target_trigger = { has_trait = bastard #Sons of barons are valid if they have an elder male sibling any_sibling = { - count >= 1 + count >= 2 is_male = yes age > prev.age house ?= prev.house @@ -775,6 +770,7 @@ ep3_story_cycle_admin_eunuch_valid_story_trigger = { is_alive = yes save_temporary_scope_as = eunuch_temp } + story_owner = { save_temporary_scope_as = emperor_temp } trigger_if = { limit = { exists = var:protege } var:protege = { save_temporary_scope_as = protege_temp } @@ -818,6 +814,19 @@ ep3_story_cycle_admin_eunuch_involved_character = { is_appointment_valid_trigger = { $CANDIDATE$ = { + trigger_if = { + limit = { + exists = $TITLE$ + } + $TITLE$ = { + OR = { + has_title_law_flag = appointment_type_succession + holder = { + has_realm_law_flag = appointment_type_succession + } + } + } + } trigger_if = { limit = { # We check independence, not tier, to allow for admin kingdoms exists = $TITLE$ @@ -864,7 +873,7 @@ is_appointment_valid_trigger = { text = only_administrative_tt trigger_if = { limit = { is_landed = yes } - has_government = administrative_government + government_has_flag = government_is_administrative } } is_clergy = no @@ -927,6 +936,7 @@ can_recruit_archer_cavalry_trigger = { text = can_recruit_archer_cavalry_trigger_desc OR = { can_create_maa = horse_archers + can_create_maa = mangudai can_create_maa = asawira can_create_maa = accolade_maa_horse_archers } @@ -959,7 +969,7 @@ ep3_vassal_will_become_admin = { } NOR = { #We convert only clan and feudal vassals in this decision government_has_flag = government_is_theocracy - government_has_flag = government_is_republic + government_has_flag = government_is_special_republic government_has_flag = government_is_landless_adventurer government_has_flag = government_is_tribal government_has_flag = government_is_administrative @@ -1048,7 +1058,10 @@ has_any_gallowsbait_xp_trigger = { ep3_restored_rome_hard_mode_trigger = { this = title:e_roman_empire.holder - any_owned_story = { story_type = ep3_story_cycle_restoring_rome } + any_owned_story = { + story_type = ep3_story_cycle_restoring_rome + has_variable = roman_empire_hard_mode + } } faith_is_interesting_heresy_to_state_faith_trigger = { @@ -1146,7 +1159,7 @@ ep3_interesting_courtier_to_ask_trigger = { ep3_admin_faction_trigger = { trigger_if = { # Enabled for all admin realms with EP3 limit = { has_ep3_dlc_trigger = yes } - $FACTION_TARGET$ = { has_government = administrative_government } + $FACTION_TARGET$ = { government_has_flag = government_is_administrative } } trigger_else = { # Enabled for Byzantium without EP3 $FACTION_TARGET$ = { has_title = title:e_byzantium } @@ -1427,24 +1440,35 @@ ep3_adventurer_ai_valid_contract_trigger = { hasan_evangelize_province_trigger = { save_temporary_scope_as = county - AND = { - NOT = { faith = root.faith } - #faith.religion = root.faith.religion # QA thinks its more fun without this! - scope:county = { - any_county_province = { - barony = { - NOT = { is_holy_site_of = scope:county.faith } - } + scope:county.faith = { + # Religion is same as Hasan's (i.e. Muslim) + #religion = root.religion # QA thinks its more fun without this! + NOR = { + # Faith is different from Hasan's + custom_tooltip = { + text = zealous_missionary_start_decision_other_faith_location + this = root.faith + } + # County is not held by it's Faith's Religious Head + custom_tooltip = { + text = is_held_by_hof_tt + religious_head ?= scope:county.holder } } - development_level <= 25 - custom_tooltip = { - text = has_tougher_to_convert_tt - NOT = { has_county_modifier = tougher_to_convert } - } - custom_tooltip = { - text = 0_or_below_county_opinion_tt - county_opinion <= 0 + } + development_level <= 25 + custom_tooltip = { + text = has_tougher_to_convert_tt + NOT = { has_county_modifier = tougher_to_convert } + } + custom_tooltip = { + text = 0_or_below_county_opinion_tt + county_opinion <= 0 + } + custom_tooltip = { + text = NOT_IS_HOLY_SITE_TRIGGER + NOT = { + any_direct_de_jure_vassal_title = { is_holy_site_of = scope:county.faith } } } } diff --git a/common/scripted_triggers/07_frankokratia_triggers.txt b/common/scripted_triggers/07_frankokratia_triggers.txt new file mode 100644 index 00000000..3574341c --- /dev/null +++ b/common/scripted_triggers/07_frankokratia_triggers.txt @@ -0,0 +1,720 @@ +################################################## +### FRANKOKRATIA TRIGGERS +################################################## +ep3_frankokratia_ghw_trigger = { + #There is an emperor of Byzantium + exists = title:e_byzantium.holder + #There is NOT a Latin emperor + NOT = { exists = title:e_latin_empire.holder } + #Byzantine emperor is Christian, but not Catholic + title:e_byzantium.holder.faith = { + NOT = { this = faith:catholic } + religion = religion:christianity_religion + } + trigger_if = { + limit = { + title:e_byzantium.holder = { + government_has_flag = government_is_administrative + } + } + #Byzantine state faith is not Catholic + title:e_byzantium.holder.primary_title = { + state_faith = { + NOT = { this = faith:catholic } + religion = religion:christianity_religion + } + } + } + + trigger_if = { + limit = { + has_game_rule = historicity_frankokratia_default + } + OR = { + exists = global_var:cath_crusade_1 + current_date >= 1178.1.1 + } + } + trigger_else_if = { + limit = { + has_game_rule = historicity_frankokratia_blocked + } + always = no + } + trigger_else_if = { + limit = { + has_game_rule = historicity_frankokratia_fourth_crusade + } + OR = { + AND = { + current_date < 1178.1.1 + exists = global_var:cath_crusade_1 + global_var:cath_crusade_1 >= 3 + } + AND = { + current_date >= 1178.1.1 + exists = global_var:cath_crusade_1 + } + } + } + trigger_else = { + #historicity_frankokratia_high game rule has no start date-based restrictions + } + + #Byz emperor or By capital is some kind of Greek + OR = { + title:e_byzantium.holder.culture = { + OR = { + this = culture:greek + any_parent_culture_or_above = { + this = culture:greek + } + has_cultural_pillar = heritage_byzantine + } + } + title:e_byzantium.holder.capital_county.culture = { + OR = { + this = culture:greek + any_parent_culture_or_above = { + this = culture:greek + } + has_cultural_pillar = heritage_byzantine + } + } + } + #Looser requirements if we really want it to happen + trigger_if = { + limit = { + current_date >= 1200.1.1 + #Latin empire hasn't been made before + NOT = { + has_global_variable = frankokratia_occurred + } + exists = global_var:cath_crusade_1 + } + #A target that Mediterranean control could help reach.. and a bit more + ghw_target_title = { + OR = { + title_capital_county.title_province = { geographical_region = world_middle_east_arabia } + title_capital_county.title_province = { geographical_region = world_middle_east_jerusalem } + title_capital_county.title_province = { geographical_region = world_asia_minor } + title_capital_county.title_province = { geographical_region = world_africa_north } + title_capital_county.title_province = { geographical_region = world_europe_west_iberia } + this = title:k_caucasus + this = title:k_pontic_steppe + this = title:k_cyprus + this = title:k_krete + this = title:k_hellas + this = title:k_sardinia + } + } + } + trigger_else = { + #A target that Mediterranean control could help reach + ghw_target_title = { + OR = { + title_capital_county.title_province = { geographical_region = world_middle_east_arabia } + title_capital_county.title_province = { geographical_region = world_middle_east_jerusalem } + title_capital_county.title_province = { geographical_region = world_asia_minor } + title_capital_county.title_province = { geographical_region = world_africa_north } + this = title:k_caucasus + this = title:k_pontic_steppe + this = title:k_cyprus + this = title:k_krete + this = title:k_hellas + } + } + } +} + +ep3_frankokratia_transiting_relative_trigger = { + OR = { + is_ruler = no + AND = { + exists = scope:char_temp + highest_held_title_tier <= scope:char_temp.highest_held_title_tier + } + AND = { + exists = root + highest_held_title_tier <= root.highest_held_title_tier + } + highest_held_title_tier < tier_county + NOT = { + faith = faith:catholic + } + is_imprisoned = yes + is_incapable = yes + capital_province = { + NOR = { + geographical_region = world_europe_south_italy + geographical_region = world_europe_west_francia + geographical_region = world_europe_west_germania + geographical_region = world_europe_west_iberia + geographical_region = custom_hungary + geographical_region = custom_west_slavia + kingdom = title:k_croatia + kingdom = title:k_bavaria + } + } + is_vassal_of = title:e_byzantium.holder + is_at_war_with = title:e_byzantium.holder + } + is_ai = yes +} + +ep3_frankokratia_story_owner_trigger = { + save_temporary_scope_as = char_temp + faith = faith:catholic + is_playable_character = yes + highest_held_title_tier >= tier_county + highest_held_title_tier <= tier_kingdom + exists = faith.religious_head + faith.religious_head = { is_ai = yes } + NOT = { scope:char_temp = faith.religious_head } + exists = scope:char_temp.faith.great_holy_war + #Not pals with the Byzantine emperor + exists = title:e_byzantium.holder + is_imprisoned = no + is_incapable = no + #Use this to eliminate owners that might lose the story + OR = { + exists = primary_heir + exists = player_heir + } + NOR = { + is_allied_to = title:e_byzantium.holder + top_liege = title:e_byzantium.holder + is_at_war_with = title:e_byzantium.holder + has_truce = title:e_byzantium.holder + has_relation_friend = title:e_byzantium.holder + has_relation_lover = title:e_byzantium.holder + has_relation_soulmate = title:e_byzantium.holder + } + #Needs to be interesteed in working with Latin shipbuilders + capital_province = { + OR = { + geographical_region = world_europe_south_italy + geographical_region = world_europe_west_francia + geographical_region = world_europe_west_germania + geographical_region = world_europe_west_iberia + geographical_region = custom_hungary + geographical_region = custom_west_slavia + kingdom = title:k_croatia + kingdom = title:k_bavaria + } + } + #Needs to be related to a claimant + OR = { + #Close family claimant + any_close_or_extended_family_member = { + OR = { + AND = { + ep3_frankokratia_claimant_trigger = yes + } + AND = { + ep3_frankokratia_transiting_relative_trigger = yes + #In-law claimant + any_spouse = { + ep3_frankokratia_claimant_trigger = yes + } + } + } + } + #Close family in-law + any_close_family_member = { + ep3_frankokratia_transiting_relative_trigger = yes + any_spouse = { + ep3_frankokratia_transiting_relative_trigger = yes + any_close_family_member = { + ep3_frankokratia_claimant_trigger = yes + } + } + } + #Spouse claimant + any_spouse = { + OR = { + ep3_frankokratia_claimant_trigger = yes + AND = { + ep3_frankokratia_transiting_relative_trigger = yes + any_close_family_member = { + ep3_frankokratia_claimant_trigger = yes + } + } + + } + } + #Courtier claimant + any_courtier_or_guest = { + is_foreign_court_guest = no + ep3_frankokratia_claimant_trigger = yes + } + #friends + any_relation = { + type = friend + ep3_frankokratia_claimant_trigger = yes + } + #soulmates + any_relation = { + type = soulmate + ep3_frankokratia_claimant_trigger = yes + } + #any pool character + any_pool_character = { + province = scope:char_temp.capital_province + ep3_frankokratia_claimant_trigger = yes + } + + } + #Should be vaguely Western in culture + culture = { + OR = { + has_cultural_pillar = heritage_goidelic + has_cultural_pillar = heritage_west_germanic + has_cultural_pillar = heritage_brythonic + has_cultural_pillar = heritage_north_germanic + has_cultural_pillar = heritage_iberian + has_cultural_pillar = heritage_latin + has_cultural_pillar = heritage_south_slavic + has_cultural_pillar = heritage_magyar + has_cultural_pillar = heritage_west_slavic + has_cultural_pillar = heritage_central_germanic + has_cultural_pillar = heritage_frankish + } + } +} + +ep3_frankokratia_claimant_trigger = { + trigger_if = { + limit = { + exists = scope:char_temp + } + highest_held_title_tier < scope:char_temp.highest_held_title_tier + } + OR = { + has_claim_on = title:e_byzantium + AND = { + title:e_byzantium.holder.capital_county = title:c_byzantion + has_claim_on = title:k_thessalonika + } + AND = { + title:e_byzantium.holder.capital_county = title:c_byzantion + has_claim_on = title:d_thrace + } + AND = { + title:e_byzantium.holder.capital_county = title:c_byzantion + has_claim_on = title:c_byzantion + } + AND = { + is_child_of = title:e_byzantium.holder + title:e_byzantium.holder = { + has_realm_law = equal_law + } + } + AND = { + is_child_of = title:e_byzantium.holder + is_male = yes + title:e_byzantium.holder = { + OR = { + has_realm_law = male_preference_law + has_realm_law = male_only_law + } + } + } + AND = { + is_child_of = title:e_byzantium.holder + is_female = yes + title:e_byzantium.holder = { + OR = { + has_realm_law = female_preference_law + has_realm_law = female_only_law + } + } + } + } + age >= 10 + is_imprisoned = no + is_healthy = yes + is_ai = yes + OR = { + has_claim_on = title:e_byzantium + ai_boldness >= 0 + ai_greed >= 0 + ai_honor <= 0 + } + NOR = { + is_vassal_of = title:e_byzantium.holder + is_consort_of = title:e_byzantium.holder + has_relation_soulmate = title:e_byzantium.holder + has_relation_friend = title:e_byzantium.holder + has_relation_best_friend = title:e_byzantium.holder + } + NAND = { + OR = { + is_landed = yes + is_landless_ruler = yes + } + top_liege = title:e_byzantium.holder + } +} + +ep3_frankokratia_will_start_trigger = { + NOR = { + has_trait = just + has_trait = humble + has_trait = content + has_trait = lazy + has_trait = craven + has_trait = loyal + } + OR = { + has_trait = greedy + has_trait = eccentric + has_trait = ambitious + has_trait = fickle + has_trait = arbitrary + AND = { + ai_rationality <= 0 + ai_boldness >= 0 + ai_honor <= 0 + ai_energy >= 0 + } + } + +} + +ep3_frankokratia_financier_trigger = { + faith = faith:catholic + is_ai = yes + #Not pals with byz emperor + NOR = { + is_allied_to = title:e_byzantium.holder + is_vassal_of = title:e_byzantium.holder + has_relation_friend = title:e_byzantium.holder + has_relation_lover = title:e_byzantium.holder + has_relation_soulmate = title:e_byzantium.holder + AND = { + exists = faith.religious_head + this = faith.religious_head + } + } + #Gotta have money to be a financier + gold >= 0 + #Your capital needs to be somewhere useful + capital_county = { + title_province = { + OR = { + geographical_region = world_europe_south + geographical_region = world_europe_west_iberia + geographical_region = world_europe_west_francia + } + } + is_coastal_county = yes + } + is_at_war = no +} + +ep3_frankokratia_financier_sub_trigger = { + highest_held_title_tier >= tier_county + government_has_flag = government_is_special_republic + ep3_frankokratia_financier_trigger = yes +} + +ep3_frankokratia_financier_exists_trigger = { + OR = { + AND = { + exists = title:k_venice.holder + title:k_venice.holder = { + ep3_frankokratia_financier_sub_trigger = yes + } + } + title:e_italy = { + any_in_de_jure_hierarchy = { + count >= 1 + exists = holder + holder = { + ep3_frankokratia_financier_sub_trigger = yes + } + } + } + title:k_sicily = { + any_in_de_jure_hierarchy = { + count >= 1 + exists = holder + holder = { + ep3_frankokratia_financier_sub_trigger = yes + } + } + } + title:k_croatia = { + any_in_de_jure_hierarchy = { + count >= 1 + exists = holder + holder = { + ep3_frankokratia_financier_sub_trigger = yes + } + } + } + title:k_burgundy = { + any_in_de_jure_hierarchy = { + count >= 1 + exists = holder + holder = { + ep3_frankokratia_financier_sub_trigger = yes + } + } + } + title:k_aquitaine = { + any_in_de_jure_hierarchy = { + count >= 1 + exists = holder + holder = { + ep3_frankokratia_financier_sub_trigger = yes + } + } + } + title:e_spain = { + any_in_de_jure_hierarchy = { + count >= 1 + exists = holder + holder = { + ep3_frankokratia_financier_sub_trigger = yes + } + } + } + title:e_italy = { + any_in_de_jure_hierarchy = { + count >= 1 + exists = holder + holder = { + highest_held_title_tier >= tier_county + highest_held_title_tier < tier_empire + ep3_frankokratia_financier_trigger = yes + } + } + } + title:k_sicily = { + any_in_de_jure_hierarchy = { + count >= 1 + exists = holder + holder = { + highest_held_title_tier >= tier_county + highest_held_title_tier < tier_empire + ep3_frankokratia_financier_trigger = yes + } + } + } + title:k_croatia = { + any_in_de_jure_hierarchy = { + count >= 1 + exists = holder + holder = { + highest_held_title_tier >= tier_county + highest_held_title_tier < tier_empire + ep3_frankokratia_financier_trigger = yes + } + } + } + } +} + +ep3_frankokratia_valid_joiner_trigger = { + NOR = { + has_character_flag = had_event_frankokratia_0020 + this = faith.religious_head + any_liege_or_above = { + this = title:e_byzantium.holder + } + is_allied_to = title:e_byzantium.holder + is_vassal_of = title:e_byzantium.holder + has_truce = title:e_byzantium.holder + has_relation_friend = title:e_byzantium.holder + any_owned_story = { + story_type = frankokratia_story + } + } +} + +ep3_frankokratia_latin_kingdom_available_trigger = { + OR = { + NOT = { exists = holder } + holder = { + this = title:e_byzantium.holder + } + holder = { + is_vassal_or_below_of = title:e_byzantium.holder + NOT = { + is_at_war_with = title:e_byzantium.holder + } + } + } + #At least 2 counties in the kingdom belong to byzantine emperor + any_de_jure_county = { + count >= 2 + OR = { + holder = { + this = title:e_byzantium.holder + } + holder = { + is_vassal_or_below_of = title:e_byzantium.holder + NOT = { + is_at_war_with = title:e_byzantium.holder + } + } + } + } +} + +ep3_frankokratia_discard_old_lands_trigger = { + NAND = { + primary_title = { + empire = title:e_byzantium + } + any_sub_realm_county = { + empire = title:e_byzantium + } + } +} + +ep3_frankokratia_beneficiary_trigger = { + is_ruler = no + is_imprisoned = no + is_adult = yes + faith = scope:frankokratia_crusader.faith + NOR = { + this = scope:financier + any_heir_title = { + count >= 1 + } + has_trait = incapable + has_trait = devoted + AND = { + scope:frankokratia_crusader.faith = { + has_doctrine = doctrine_theocracy_temporal + } + has_council_position = councillor_court_chaplain + } + } + OR = { #Either not married, or not married to a ruler. + is_married = no + NOT = { + any_spouse = { + is_ruler = yes + } + } + } + OR = { + AND = { + is_male = yes + age < 50 + } + AND = { + is_female = yes + age <= 35 + } + any_child = { + count >= 1 + is_ruler = no + ep3_frankokratia_beneficiary_gender_soft_trigger = yes + } + } +} + +ep3_frankokratia_beneficiary_gender_trigger = { + trigger_if = { + limit = { + scope:frankokratia_crusader = { + OR = { + has_realm_law = male_preference_law + has_realm_law = male_only_law + } + } + } + is_male = yes + } + trigger_else_if = { + limit = { + scope:frankokratia_crusader = { + OR = { + has_realm_law = female_preference_law + has_realm_law = female_only_law + } + } + } + is_female = yes + } + trigger_else = { + scope:frankokratia_crusader = { + has_realm_law = equal_law + } + } +} + +ep3_frankokratia_beneficiary_gender_soft_trigger = { + trigger_if = { + limit = { + scope:frankokratia_crusader = { + has_realm_law = male_only_law + } + } + is_male = yes + } + trigger_else_if = { + limit = { + scope:frankokratia_crusader = { + has_realm_law = female_only_law + } + } + is_female = yes + } + trigger_else = { + scope:frankokratia_crusader = { + OR = { + has_realm_law = male_preference_law + has_realm_law = female_preference_law + has_realm_law = equal_law + } + } + } +} + +ep3_frankokratia_notification_recipient_trigger = { + OR = { + #Rulers in the Byz region + capital_province = { + county = { + empire = title:e_byzantium + } + } + #Most affected Christians + faith = faith:catholic + faith = faith:orthodox + faith = faith:armenian_apostolic + #Target faith of crusade + faith = scope:defender.faith + #Vassals of crusade defender + liege ?= scope:defender + #Vassals of byz emp + AND = { + exists = title:e_byzantium.holder + liege ?= title:e_byzantium.holder + } + #Byz emp + AND = { + exists = title:e_byzantium.holder + this ?= title:e_byzantium.holder + } + is_in_list = non_christian_franko_leaders + } +} + +ep3_orthodox_faith_trigger = { + OR = { + faith = faith:orthodox + faith = faith:coptic + faith = faith:armenian_apostolic + faith = faith:iconoclast + faith = faith:bogomilist + faith = faith:paulician + faith = faith:nestorian + } +} diff --git a/common/scripted_triggers/08_bp3_triggers.txt b/common/scripted_triggers/08_bp3_triggers.txt new file mode 100644 index 00000000..622d9197 --- /dev/null +++ b/common/scripted_triggers/08_bp3_triggers.txt @@ -0,0 +1,3 @@ +battle_poi_region_trigger = { + NOT = { has_global_variable = battle_poi_$REGION$_cooldown } +} diff --git a/common/scripted_triggers/09_mpo_greatest_of_khans_triggers.txt b/common/scripted_triggers/09_mpo_greatest_of_khans_triggers.txt new file mode 100644 index 00000000..3e356b20 --- /dev/null +++ b/common/scripted_triggers/09_mpo_greatest_of_khans_triggers.txt @@ -0,0 +1,480 @@ +################################################# +# TRIGGER LIST # +################################################# + +mpo_has_greatest_of_khans_nickname_trigger = { + OR = { + has_nickname = nick_genghis_khan + has_nickname = nick_cengiz_khan + has_nickname = nick_yekhe_khagan + has_nickname = nick_dort_yonlug_khagan + has_nickname = nick_tengri_khagan + has_nickname = nick_cihangir + has_nickname = nick_culture_khagan + } +} +mpo_has_gok_mongol_empire_trigger = { + OR = { + has_title = title:e_mongol_empire + custom_tooltip = { + text = gok_title_trigger + exists = global_var:greatest_of_khans_title + any_held_title = { + this = global_var:greatest_of_khans_title + } + } + } +} + +mpo_gok_coalition_member_trigger = { + save_temporary_scope_as = foe + + in_diplomatic_range = root + is_ai = yes + OR = { + is_landless_nomad = yes + is_landless_adventurer = yes + is_landed = yes + } + NOR = { + this = root + top_liege = root + is_allied_to = root + is_tributary_of_suzerain_or_above = root + top_liege = { + is_tributary_of_suzerain_or_above = root + } + has_relation_friend = root + has_relation_blood_brother = root + opinion = { + target = root + value >= 100 + } + + highest_held_title_tier < tier_county + government_has_flag = government_is_herder + is_imprisoned_by = root + is_obedient_to = root + } + ##Only relatively strong non-nomads will mess with you + trigger_if = { + limit = { + NOT = { + government_has_flag = government_is_nomadic + } + } + OR = { + AND = { + highest_held_title_tier >= tier_duchy + sub_realm_size >= 8 + } + is_confederation_member = yes + } + } + ##Only house members who dislike you will oppose you + trigger_if = { + limit = { + OR = { + AND = { + exists = house + exists = root.house + house = { + this = root.house + } + } + #also those with direct alliances to root + is_allied_to = root + } + + } + opinion = { + target = root + value < 0 + } + } + #Lower tier rulers + trigger_if = { + limit = { + highest_held_title_tier < tier_duchy + } + OR = { + NOT = { + has_dread_level_towards = { + target = root + level >= 2 + } + } + faith = { + faith_hostility_level = { + target = root.faith + value > faith_astray_level + } + } + opinion = { + target = root + value <= -40 + } + is_confederation_member = yes + root = { + any_land_neighboring_realm_with_tributaries_owner = { + this = scope:foe + } + } + } + + } +} + +mpo_gok_submitting_coward_trigger = { + is_ai = yes + is_confederation_member = no + OR = { + is_tributary_of = root + is_tributary = no + } + is_landed = yes + highest_held_title_tier < tier_duchy + NOT = { + has_relation_rival = root + } + OR = { + is_imprisoned_by = root + government_has_flag = government_is_herder + has_relation_friend = root + AND = { + exists = root.house + house ?= root.house + NOT = { + is_in_list = anti_gok_coalition_members + } + } + opinion = { + target = root + value >= 100 + } + ai_boldness <= medium_negative_ai_value + has_dread_level_towards = { + target = root + level >= 2 + } + is_tributary_of = root + AND = { + exists = house + exists = root.house + house = { + this = root.house + } + opinion = { + target = root + value >= 0 + } + } + } + trigger_if = { + limit = { + current_military_strength > 0 + root.current_military_strength > 0 + } + current_military_strength < root.current_military_strength + } + NOT = { + any_character_war = { + OR = { + primary_defender = prev + AND = { + primary_attacker = prev + primary_defender = { + top_liege = root + } + } + primary_defender = { + is_ai = no + } + } + } + } +} + +mpo_war_of_defiance_notified_player_trigger = { + NOT = { + this = root + } + OR = { + top_liege = root + top_suzerain = root + any_character_situation = { + this = situation:the_great_steppe + } + any_relation = { + type = rival + this = root + } + #Those within same de jure empire + capital_county ?= { + empire = { + any_de_jure_county = { + holder.top_liege = { + this = root + } + } + } + } + capital_county ?= { + empire = { + any_de_jure_county = { + holder.top_suzerain = { + this = root + } + } + } + } + AND = { + exists = root.capital_county + realm_to_title_distance_squared = { + title = root.capital_county + value <= squared_distance_almost_massive + } + } + } +} + +gok_desirable_vassal_trigger = { + OR = { + ai_boldness <= medium_negative_ai_value + has_trait = loyal + is_obedient_to = scope:gok + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:gok } + AND = { + exists = scope:gok.dynasty + dynasty ?= scope:gok.dynasty + } + is_allied_to = scope:gok + opinion = { + target = scope:gok + value >= 70 + } + } +} +mpo_greatest_of_khans_0030_willing_nomad_vassal = { + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + OR = { + is_obedient = yes + opinion = { + target = liege + value >= 0 + } + has_dread_level_towards = { + target = liege + level >= 1 + } + } + NOR = { + is_at_war_with = liege + has_trait = stubborn + culture = { + has_cultural_tradition = tradition_staunch_traditionalists + } + } +} + +mpo_greatest_of_khans_0030_dominated_nomad_vassal = { + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + OR = { + is_obedient = yes + opinion = { + target = liege + value >= 60 + } + has_dread_level_towards = { + target = liege + level >= 2 + } + } + NOR = { + is_at_war_with = liege + has_trait = stubborn + culture = { + OR ={ + has_cultural_tradition = tradition_staunch_traditionalists + has_cultural_tradition = tradition_quarrelsome + has_cultural_tradition = tradition_isolationist + } + } + } +} + +mpo_greatest_of_khans_0030_willing_sedentary_vassal = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + government_has_flag = government_is_theocracy + government_has_flag = government_is_landless_adventurer + } + OR = { + is_obedient = yes + opinion = { + target = liege + value >= 0 + } + has_dread_level_towards = { + target = liege + level >= 1 + } + } + NOR = { + is_at_war_with = liege + has_trait = stubborn + culture = { + has_cultural_tradition = tradition_staunch_traditionalists + } + } +} +mpo_greatest_of_khans_0030_dominated_sedentary_vassal = { + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + government_has_flag = government_is_theocracy + government_has_flag = government_is_landless_adventurer + } + OR = { + is_obedient = yes + opinion = { + target = liege + value >= 50 + } + has_dread_level_towards = { + target = liege + level >= 2 + } + } + NOR = { + is_at_war_with = liege + has_trait = stubborn + culture = { + has_cultural_tradition = tradition_staunch_traditionalists + } + culture = { + has_cultural_tradition = tradition_legalistic + } + } +} + +gok_gov_switch_valid_vassal_trigger = { + highest_held_title_tier >= tier_county + is_landed = yes + is_ai = yes + NOT = { + is_at_war_with = root + } + NOT = { + any_liege_or_above = { + is_ai = no + NOT = { + this = root + } + } + } + NOR = { + government_has_flag = government_is_theocracy + government_has_flag = government_is_landless_adventurer + } +} + +gok_willing_new_admin_vassal_trigger = { + gok_gov_switch_valid_vassal_trigger = yes + OR = { + mpo_greatest_of_khans_0030_dominated_nomad_vassal = yes + mpo_greatest_of_khans_0030_willing_sedentary_vassal = yes + culture = culture:greek + culture = { + any_parent_culture_or_above = { + this = culture:greek + } + } + culture = culture:han + culture = { + any_parent_culture_or_above = { + this = culture:han + } + } + } + NOR = { + government_has_flag = government_is_administrative + government_has_flag = government_is_tribal + } +} + +mpo_offer_submission_or_ruin_shown_actor_trigger = { + has_mpo_dlc_trigger = yes + is_landed = yes + any_owned_story = { + OR = { + story_type = story_greatest_of_khans + story_type = story_mongol_invasion + } + } +} +mpo_offer_submission_or_ruin_shown_recipient_trigger = { + NOT = { this = scope:actor } + is_landed = yes + NOT = { government_has_flag = cannot_be_vassal_or_liege } +} +mpo_offer_submission_or_ruin_valid_actor_trigger = { + prestige_level >= 1 + trigger_if = { + limit = { + exists = scope:recipient + } + custom_description = { + text = truce_on_recipient_tt + NOT = { + any_truce_target = { + this = scope:recipient + } + } + } + } +} +mpo_offer_submission_or_ruin_valid_recipient_trigger = { + is_independent_ruler = yes + NOT = { + is_at_war_with = scope:actor + } + custom_description = { + text = was_recently_granted_independence + NOT = { + has_opinion_modifier = { + modifier = granted_independence_opinion + target = scope:actor + } + } + } + custom_description = { + text = not_recently_offered_submission + NOT = { + has_character_flag = accepted_gok_submission + } + } +} + +#Basically just checking they are tribal (and shouldn't provide siege) or have a unique maa that's interesting to have +#I think this will balance how much siege vs. military strength AI take as GoK +mpo_gok_auto_cultural_maa_trigger = { + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + culture = { + OR = { + culture_has_archer_cavalry_maa = yes + has_cultural_parameter = unlock_maa_cataphract_archers + } + } + + } +} diff --git a/common/scripted_triggers/09_mpo_settlement_issue_triggers.txt b/common/scripted_triggers/09_mpo_settlement_issue_triggers.txt new file mode 100644 index 00000000..44e005a9 --- /dev/null +++ b/common/scripted_triggers/09_mpo_settlement_issue_triggers.txt @@ -0,0 +1,57 @@ +settlement_issue_valid_to_continue_default_trigger = { + OR = { + task_contract_location.province_owner = task_contract_taker + task_contract_location.province_owner.top_liege = task_contract_taker + } + task_contract_employer = { + is_alive = yes + OR = { + liege_or_court_owner = root.task_contract_taker + employer = root.task_contract_taker + } + } +} + +settlement_issue_valid_to_keep_default_trigger = { + custom_tooltip = { + text = migration_contract_county_ownership_text + OR = { + task_contract_location.province_owner = task_contract_taker + task_contract_location.province_owner.liege = task_contract_taker + task_contract_location.province_owner.top_liege = task_contract_taker + } + } + custom_tooltip = { + text = migration_contract_county_text + task_contract_location.county = { county_control < 90 } + } +} + +settlement_issue_valid_to_create_default_trigger = { + any_knight = { + count >= 1 + } + any_held_county = { + is_landless_type_title = no + exists = title_province + county_control < 90 + NOT = { has_county_modifier = ongoing_settlement_contract } + } +} + +mpo_settlement_issue_trigger = { + any_knight = { + count >= 1 + } + any_held_county = { + is_landless_type_title = no + exists = title_province + county_control < 90 + NOT = { has_county_modifier = ongoing_settlement_contract } + } + NOT = { + any_task_contract = { + has_task_contract_type = nomadic_migration_contract_$NUMBER$ + } + } +} diff --git a/common/scripted_triggers/20_health_balancing_triggers.txt b/common/scripted_triggers/20_health_balancing_triggers.txt new file mode 100644 index 00000000..90f82ac2 --- /dev/null +++ b/common/scripted_triggers/20_health_balancing_triggers.txt @@ -0,0 +1,67 @@ +### HEALTH BALANCING TRIGGERS ### +# Along with the health balancing effects, these triggers are only used to get data output used for balancing diseases. + + +# For activating data output on the number of victims (total, dead and surviving) for contagious disease outbreaks. Combine with a run file like this to quickly collect data: + +#every_independent_ruler = { +# random_courtier = { +# trigger_event = health.1011 #1011 is plague, 1010 is smallpox +# } +#} + + +debug_activate_contagious_disease_outbreak_data_trigger = { + always = no +} + +is_very_young_character = { + OR = { + age <= 20 + AND = { + OR = { + has_trait = whole_of_body + has_trait = fecund + } + age <= 25 + } + } +} + +is_young_character = { + OR = { + age <= 30 + AND = { + OR = { + has_trait = whole_of_body + has_trait = fecund + } + age <= 35 + } + } +} + +is_aging_character = { + OR = { + age >= 40 + AND = { + OR = { + has_trait = whole_of_body + has_trait = fecund + } + age >= 45 + } + } +} + +is_old_character = { + trigger_if = { + limit = { + is_male = yes + } + age >= define:NCharacter|MALE_ELDERLY_AGE + } + trigger_else = { + age >= define:NCharacter|FEMALE_ELDERLY_AGE + } +} \ No newline at end of file diff --git a/common/scripted_triggers/20_health_triggers.txt b/common/scripted_triggers/20_health_triggers.txt new file mode 100644 index 00000000..01c8bc4e --- /dev/null +++ b/common/scripted_triggers/20_health_triggers.txt @@ -0,0 +1,865 @@ +############################# +# STANDARD ILLNESS TRIGGERS # +############################# + +has_any_illness = { #Checks the game for every disease + has_trait_with_flag = illness +} + +has_any_debilitating_illness = { #Check for any illness that would warrant the sick animation + has_trait_with_flag = debilitating_illness +} + +is_debilitating_illness_trait = { #Check for any illness that would warrant the sick animation + has_trait_flag = debilitating_illness +} + +can_get_non_epidemic_disease_trigger = { #Diseases shouldn't stack. Don't add a non-epidemic disease if you have another, unless that disease is lover's pox + NOT = { has_trait_with_flag = blocks_getting_non_epidemic_disease } +} + +############################################## +# SITUATIONAL EVENT CONTENT ILLNESS TRIGGERS # +############################################## + +# Will this character suffer age-related health issues, factoring how healthy they actually are vs. what their age is? +age_ranked_health_vulnerability_threshold_trigger = { + OR = { + # If you're already having problems... + has_trait = infirm + # Otherwise, we check health crossed against age. + ## Characters that are this old are vulnerable regardless of health. + age >= 80 + ## Else, the higher your health is, the older you need to be to suffer age-related health problems. + AND = { + health <= good_health + age >= 70 + } + AND = { + health <= medium_health + age >= 60 + } + AND = { + health <= fine_health + age >= 50 + } + AND = { + health <= poor_health + age >= 40 + } + AND = { + health <= dying_health + age >= 30 + } + } + NOT = { has_trait = immortal } +} + +# Might this character succumb to a stroke, aneurysm, or other blood pressure-related injury? +potential_victim_of_apoplexy_trigger = { + OR = { + has_trait = wrathful + # Impatient/irritable characters tend towards this when pushed out of their comfort zone. + AND = { + OR = { + has_trait = impatient + has_trait = irritable + } + stress >= low_stress + } + # Non-calm characters may be at risk if stressed. + AND = { + stress_level >= 1 + NOT = { has_trait = calm } + } + # But everyone is vulnerable eventually. + stress_level >= 2 + } +} + +# Does the character have a trait that might shorten their life exptectancy, exacerbate unfortunate physical circumstances, or otherwise complicate medical conditions? +has_weak_physical_health_traits_trigger = { + # We discount these if you're in truly rude health. + health < excellent_health + OR = { + # General expected reduction in physical health. + has_trait = physique_bad + has_trait = weak + # Induces & exacerbates secondary physical complications. + has_trait = hunchbacked + has_trait = giant + has_trait = inbred + # Marfan's Syndrome can be medicated well in the modern day, but not in our period. + has_trait = spindly + # Haemophilia is both easier to medicate and easier to treat the consequences of in the modern day, but could really mess you up in the medieval period. + has_trait = bleeder + } + # Deliberately excluded: + ## dwarf + ### Unlike gigantism, dwarfism doesn't generally reduce life expectancy or induce complications except in that it can be more likely to occur if you have other conditions. For our purposes, those separate conditions are separate traits. + ## scaly + ### Ichthyosis does not reduce life expectancy & has a minimal effect on most (though not all) secondary conditions. + ## albino + ### Zero effect on life exptectancy. + ## wheezing + ### Asthma does reduce your life exptectancy, but not to the same degree as the other bad physical traits. +} + +# Does this character have some physical feature that would be easily mocked? +## Remember to generally try and filter out compassionate characters from bullying people over their appearance & to take caution when using this in your narrative. +has_easily_mocked_physical_attribute_trigger = { + OR = { + # Weight. + current_weight > overweight_value + current_weight < underweight_value + # Genetic traits. + has_trait = beauty_bad + has_trait = clubfooted + has_trait = hunchbacked + has_trait = dwarf + has_trait = giant + has_trait = inbred + has_trait = spindly + has_trait = scaly + has_trait = albino + # Illness traits. + ## Generally stuff with obvious, preferably permanent, outward physical symptoms. + has_trait = great_pox + has_trait = lovers_pox + has_trait = leper + has_trait = gout_ridden + # Physical traits. + has_trait = wounded + has_trait = maimed + has_trait = one_eyed + has_trait = one_legged + has_trait = disfigured + has_trait = blind + is_eunuch_trigger = yes + } +} + +############################ +# VARIOUS DISEASE TRIGGERS # +############################ + +#Takes argument disease +can_contract_disease_trigger = { + save_temporary_scope_as = sick_character_check + + # Is not immune to disease + NOT = { has_character_flag = immune_to_disease } + + #Doesn't already have the trait + NOT = { has_trait = $DISEASE$ } + + #Only get measles once + trigger_if = { + limit = { trait:$DISEASE$ = trait:measles } + NOT = { has_character_flag = measles_immunity } + } + + #Only get bubonic plague once + trigger_if = { + limit = { trait:$DISEASE$ = trait:bubonic_plague } + NOT = { has_character_flag = bubonic_immunity } + } + + #Young characters do not get gout + trigger_if = { + limit = { trait:$DISEASE$ = trait:gout_ridden } + current_weight >= 50 + is_young_character = no + } + + save_temporary_scope_value_as = { + name = disease_type_for_trigger + value = flag:$DISEASE$ + } + + trigger_if = { #Lover's pox can only be contracted if you are sexually active + limit = { + scope:disease_type_for_trigger = flag:lovers_pox + is_imprisoned = yes + } + imprisoner = { + OR = { + AND = { + scope:sick_character_check = { is_in_prison_type = dungeon } + any_prisoner = { + OR = { + has_relation_lover = scope:sick_character_check + any_consort = { + this = scope:sick_character_check + } + } + } + } + AND = { + scope:sick_character_check = { is_in_prison_type = house_arrest } + OR = { + any_prisoner = { + OR = { + has_relation_lover = scope:sick_character_check + any_consort = { + this = scope:sick_character_check + } + } + } + any_courtier = { + OR = { + has_relation_lover = scope:sick_character_check + any_consort = { + this = scope:sick_character_check + } + } + } + } + } + } + } + } + + # Check to see that there is someone for you to have sex with if you are traveling + trigger_if = { + limit = { + scope:disease_type_for_trigger = flag:lovers_pox + is_travelling = yes + # Do not block Goliardic Shenanigans! + involved_activity ?= { + NOT = { has_activity_type = activity_adult_education } + } + } + current_travel_plan = { + any_entourage_character = { + OR = { + has_relation_lover = scope:sick_character_check + any_consort = { + this = scope:sick_character_check + } + } + } + } + } + + #Secondary requirements (mutually exclusive diseases or immunity) + OR = { + NOR = { #No secondary requirement + scope:disease_type_for_trigger = flag:ill + scope:disease_type_for_trigger = flag:smallpox + scope:disease_type_for_trigger = flag:bubonic_plague + } + AND = { + scope:disease_type_for_trigger = flag:ill + NOT = { has_trait = pneumonic } + } + AND = { + scope:disease_type_for_trigger = flag:smallpox + NOT = { has_character_flag = disease_immunity_smallpox } + } + AND = { + scope:disease_type_for_trigger = flag:measles + NOT = { has_character_flag = disease_immunity_measles } + } + AND = { + scope:disease_type_for_trigger = flag:bubonic_plague + NOT = { has_character_flag = disease_immunity_bubonic_plague } + } + } + + #No disease stacking + OR = { + can_get_non_epidemic_disease_trigger = yes + OR = { + scope:disease_type_for_trigger = flag:bubonic_plague + scope:disease_type_for_trigger = flag:smallpox + } + AND = { + scope:disease_type_for_trigger = flag:pneumonic + has_trait = ill + } + } + + #Cooldown is over + NOR = { + has_character_flag = contraction_cooldown_general #Haven't had a disease for 2 years + #No specific cooldowns: + #Ill, you can get it often + #Smallpox and bubonic plague, after one time you are immune + #Lover's pox and leper because you never recover + AND = { + has_character_flag = contraction_cooldown_pneumonic + scope:disease_type_for_trigger = flag:pneumonic + } + AND = { + has_character_flag = contraction_cooldown_gout_ridden + scope:disease_type_for_trigger = flag:gout_ridden + } + AND = { + has_character_flag = contraction_cooldown_typhus + scope:disease_type_for_trigger = flag:typhus + } + AND = { + has_character_flag = contraction_cooldown_consumption + scope:disease_type_for_trigger = flag:consumption + } + AND = { + has_character_flag = contraction_cooldown_cancer + scope:disease_type_for_trigger = flag:cancer + } + AND = { + has_character_flag = contraction_cooldown_great_pox + scope:disease_type_for_trigger = flag:great_pox + } + AND = { + has_character_flag = contraction_cooldown_dysentery + scope:disease_type_for_trigger = flag:dysentery + } + AND = { + has_character_flag = contraction_cooldown_ergotism + scope:disease_type_for_trigger = flag:ergotism + } + } +} + +has_any_disease_trigger = { + OR = { + has_trait = ill + has_trait = lovers_pox + has_trait = great_pox + has_trait = early_great_pox + has_trait = bubonic_plague + has_trait = smallpox + has_trait = measles + has_trait = ergotism + has_trait = dysentery + has_trait = consumption + has_trait = typhus + has_trait = cancer + has_trait = pneumonic + has_trait = leper + has_trait = gout_ridden + } +} + +has_std_trigger = { + OR = { + has_trait = lovers_pox + has_trait = great_pox + has_trait = early_great_pox + } +} + +has_epidemic_disease_trigger = { + OR = { + has_trait = bubonic_plague + has_trait = smallpox + has_trait = measles + has_trait = ergotism + has_trait = dysentery + has_trait = consumption + has_trait = typhus + } +} + +has_contagious_disease_trigger = { #Only diseases handled by the disease_outbreak_pulse and the disease_recovery_pulse + OR = { + has_std_trigger = yes + has_trait = bubonic_plague + has_trait = smallpox + has_trait = measles + has_trait = dysentery + has_trait = consumption + has_trait = typhus + } +} + +has_yearly_recovery_disease_trigger = { + OR = { + has_trait = consumption + has_trait = cancer + has_trait = great_pox + has_trait = gout_ridden + } +} + +has_quarterly_recovery_disease_trigger = { + OR = { + + has_trait = ill + has_trait = pneumonic + has_trait = typhus + has_trait = smallpox + has_trait = bubonic_plague + } +} + +has_short_disease_trigger = { + OR = { + has_trait = ill + has_trait = typhus + has_trait = smallpox + has_trait = bubonic_plague + has_trait = ergotism + has_trait = measles + has_trait = dysentery + } +} + +has_serious_disease_trigger = { + OR = { + has_trait = bubonic_plague + has_trait = great_pox + has_trait = leper + has_trait = typhus + has_trait = smallpox + has_trait = cancer + has_trait = pneumonic + has_trait = consumption + has_trait = measles + has_trait = dysentery + has_trait = ergotism + } +} +has_insect_carried_disease_trigger = { + OR = { + has_trait = bubonic_plague + has_trait = typhus + } +} + +############################ +# COURT PHYSICIAN TRIGGERS # +############################ + +court_physician_available_trigger = { + exists = court_owner + court_owner = { + employs_court_position = court_physician_court_position + any_court_position_holder = { + type = court_physician_court_position + is_physically_able = yes + } + } + # If you're traveling, we check that there is a court physician with you + court_physician_available_when_traveling_trigger = yes +} + +court_physician_available_when_traveling_trigger = { + trigger_if = { + limit = { is_travelling = yes } + current_travel_plan = { + any_entourage_character = { + has_court_position = court_physician_court_position + } + } + } +} + +can_be_court_physician_of = { + is_courtier_of = $EMPLOYER$ + is_adult = yes + basic_is_available_ai = yes + NOT = { has_trait = incapable } +} + +can_punish_court_physician = { + save_temporary_scope_as = court_physician_punisher + $PHYSICIAN$ = { + is_alive = yes + target_is_liege_or_above = scope:court_physician_punisher + } +} + +character_can_easily_self_treat_trigger = { + OR = { + # Understand medicine implicitly. + has_trait = lifestyle_physician + has_trait = lifestyle_herbalist + has_trait = devoted + ## Truly, obscenely high learning means your general knowledge is good enough for anything even if you aren't specifically an expert on it. + learning >= 35 + # Understands medicine if learning is high enough. + AND = { + learning >= high_skill_rating + OR = { + has_trait = lifestyle_gardener + has_trait = lifestyle_traveler + } + } + # Might understand medicine if learning is really, really high. + AND = { + learning >= very_high_skill_rating + OR = { + has_trait = intrigue_court_2 + has_trait = scholarly_court_2 + } + } + AND = { + learning >= extremely_high_skill_rating + OR = { + has_trait = intrigue_court_1 + has_trait = scholarly_court_1 + } + } + } +} + +###################### +# TREATMENT TRIGGERS # +###################### + +has_treatable_disease_trigger = { + OR = { + has_trait = consumption + has_trait = cancer + has_trait = great_pox + has_trait = gout_ridden + has_trait = ill + has_trait = pneumonic + has_trait = typhus + has_trait = smallpox + has_trait = bubonic_plague + has_trait = leper + has_trait = measles + has_trait = dysentery + has_trait = ergotism + } +} + +has_wounds_trigger = { + OR = { + has_trait_rank = { + trait = wounded + rank >= 2 + } + has_character_modifier = infected_wound_modifier + has_character_modifier = gangrene_modifier + } +} + +has_good_disease_treatment_trigger = { + OR = { + has_character_modifier = safe_disease_treatment_success_high_modifier + has_character_modifier = safe_disease_treatment_success_low_modifier + has_character_modifier = risky_disease_treatment_success_high_modifier + has_character_modifier = risky_disease_treatment_success_low_modifier + } +} + +has_recent_treatment_trigger = { + OR = { + has_character_modifier = safe_disease_treatment_success_high_modifier + has_character_modifier = safe_disease_treatment_success_low_modifier + has_character_modifier = safe_disease_treatment_failure_modifier + has_character_modifier = risky_disease_treatment_success_high_modifier + has_character_modifier = risky_disease_treatment_success_low_modifier + has_character_modifier = risky_disease_treatment_failure_modifier + } +} + +has_recent_wound_treatment_trigger = { + OR = { + has_character_modifier = safe_wound_treatment_success_high_modifier + has_character_modifier = safe_wound_treatment_success_low_modifier + has_character_modifier = safe_wound_treatment_failure_modifier + has_character_modifier = risky_wound_treatment_success_modifier + has_character_modifier = risky_wound_treatment_failure_modifier + } +} + + +has_amputation_type_disease_trigger = { + exists = scope:disease_type + OR = { + scope:disease_type = flag:gout_ridden + scope:disease_type = flag:leper + scope:disease_type = flag:cancer + } +} + +has_disfigurement_type_disease_trigger = { + exists = scope:disease_type + OR = { + scope:disease_type = flag:bubonic_plague + scope:disease_type = flag:smallpox + scope:disease_type = flag:measles + scope:disease_type = flag:dysentery + scope:disease_type = flag:ergotism + scope:disease_type = flag:leper + scope:disease_type = flag:cancer + } +} + + +has_short_disease_type_trigger = { + OR = { + scope:disease_type = flag:ill + scope:disease_type = flag:pneumonic #3 + scope:disease_type = flag:measles #3 + scope:disease_type = flag:dysentery #3.5 + scope:disease_type = flag:ergotism #3.5 + scope:disease_type = flag:typhus #3.5 + scope:disease_type = flag:smallpox #3.5 + scope:disease_type = flag:bubonic_plague #6.5 + } +} + +has_slow_disease_type_trigger = { + OR = { + scope:disease_type = flag:consumption #2 + scope:disease_type = flag:cancer #3 + scope:disease_type = flag:great_pox #1 + scope:disease_type = flag:gout_ridden #1.5 + scope:disease_type = flag:leper #1.5 + } +} + +has_high_health_penalty_disease_type_trigger = { # >= 3.5 + OR = { + ### TYPHUS + scope:disease_type = flag:typhus #4.5 + 1 + ### SMALLPOX + scope:disease_type = flag:smallpox #4.5 + 1.5 + ### BUBONIC PLAGUE + scope:disease_type = flag:bubonic_plague #7 + 2 + ### DYSENTERY + scope:disease_type = flag:dysentery #3.5 + 2 + ### ERGOTISM + scope:disease_type = flag:ergotism #3.5 + ### CONSUMPTION + AND = { + scope:disease_type = flag:consumption #2 + 1 + 2 + is_old_character = yes + } + ### CANCER + AND = { + scope:disease_type = flag:cancer #3 + 1 + is_old_character = yes + } + ### MEASLES + AND = { + scope:disease_type = flag:measles #3 + 3 + is_old_character = yes + } + ### PNEUMONIA + AND = { + scope:disease_type = flag:pneumonic #3 + 2 + is_old_character = yes + } + } +} + +has_low_health_penalty_disease_type_trigger = { # < 3.5 + OR = { + ## ILL + scope:disease_type = flag:ill #1 + 1 + ### GREAT POX + scope:disease_type = flag:great_pox #1 + ### GOUT + scope:disease_type = flag:gout_ridden #1 + ### LEPROSY + scope:disease_type = flag:leper #1.5 + ### CONSUMPTION + AND = { + scope:disease_type = flag:consumption #2 + 1 + 2 + is_old_character = no + } + ### CANCER + AND = { + scope:disease_type = flag:cancer #3 + 1 + is_old_character = no + } + ### MEASLES + AND = { + scope:disease_type = flag:measles #3 + 3 + is_old_character = no + } + ### PNEUMONIA + AND = { + scope:disease_type = flag:pneumonic #3 + 2 + is_old_character = no + } + } +} + +minor_disease_flag_for_notification_trigger = { + OR = { + scope:disease_type = flag:ill + scope:disease_type = flag:gout_ridden + scope:disease_type = flag:lovers_pox + scope:disease_type = flag:early_great_pox + } +} + +sick_enough_for_relative_to_care_trigger = { + #For this list of diseases, you need to be dying + trigger_if = { + limit = { + exists = scope:disease_type + minor_disease_flag_for_notification_trigger = yes + } + health < death_chance_dying_health + } + #For all others we always notify + trigger_else = { + always = yes + } +} + +liege_is_responsible_for_treatment_trigger = { + is_ruler = no + exists = liege + OR = { + trigger_if = { + limit = { exists = liege.primary_spouse } + this = liege.primary_spouse + } + trigger_if = { + limit = { exists = liege.player_heir } + this = liege.player_heir + } + } +} + +liege_picks_treatment_trigger = { + save_temporary_scope_as = pick_treatment_check + exists = liege + liege_is_responsible_for_treatment_trigger = yes + trigger_if = { + limit = { exists = scope:disease_type } + sick_enough_for_relative_to_care_trigger = yes + } +} + +root_picks_treatment_for_sick_character_trigger = { + scope:sick_character = { liege_picks_treatment_trigger = yes } + scope:sick_character = { liege = { this = root } } +} + +has_infected_or_gangrenous_wound_trigger = { + OR = { + has_character_modifier = gangrene_modifier + has_character_modifier = infected_wound_modifier + } +} + +inform_about_relative_recovery_trigger = { + is_ruler = yes + OR = { + scope:disease_type = flag:lovers_pox #Because it has an effect (removes rejected from bed modifier) + scope:disease_type = flag:early_great_pox #Because it has an effect (removes rejected from bed modifier) + scope:disease_type = flag:great_pox #Because it has an effect (removes rejected from bed modifier) + AND = { + is_ai = no + OR = { + NOT = { minor_disease_flag_for_notification_trigger = yes } #I.e. it's an important disease + scope:sick_character = { + is_target_in_variable_list = { #The character got an event when sick character got sick and needs to be updated + name = recovery_event_receivers + target = prev + } + } + } + } + } +} + +has_health_court_owner_trigger = { #Should match save_health_court_owner_effect + trigger_if = { + limit = { + exists = imprisoner + } + always = yes + imprisoner = { save_temporary_scope_as = trigger_health_court_owner } + } + trigger_else_if = { + limit = { exists = host } + always = yes + host = { save_temporary_scope_as = trigger_health_court_owner } + } + trigger_else = { + always = no + } +} + +court_physician_can_fail_on_purpose_trigger = { + scope:physician = { + dread_modified_ai_boldness = { + dreaded_character = scope:sick_character + value > 0 + } + } + OR = { + reverse_opinion = { + target = scope:physician + value < 0 + } + has_relation_rival = scope:physician + has_relation_potential_rival = scope:physician + } + NOT = { scope:physician = scope:sick_character } +} + +has_traits_that_negate_athletic_trigger = { #Are we already athletic or does any of our traits contradict athletic? + OR = { + has_trait = athletic + has_trait = lazy + has_trait = infirm + has_trait = incapable + } +} + +#Did this character's culture or area have any evidence of practicing trepanning? +native_trepanning_trigger = { + OR = { + root.culture = { + OR = { + has_cultural_pillar = heritage_east_african + has_cultural_pillar = heritage_west_slavic + has_cultural_pillar = heritage_central_germanic + has_cultural_pillar = heritage_west_germanic + has_cultural_pillar = heritage_dravidian + has_cultural_pillar = heritage_indo_aryan + } + } + root.faith = faith:armenian_apostolic + root.culture = culture:armenian + has_title = title:k_hungary + has_title = title:k_cuman + root.capital_province = { + OR = { + geographical_region = ghw_region_mediterranean + geographical_region = ghw_region_anatolia + geographical_region = world_europe_west_germania + geographical_region = world_europe_west + geographical_region = world_africa_north_east + geographical_region = custom_slavia + geographical_region = world_india + } + } + } +} + +#Has this character already developed immunity to the epidemic? +immune_to_epidemic = { + NOT = { + is_target_in_variable_list = { + name = immunised_plagues + target = $EPIDEMIC$ + } + } +} + +# I'm putting this here because I refuse to make a "hair_triggers.txt" file. +is_bald_trigger = { + OR = { + # As it transpires, we actually cannot use this trigger here. + #has_gene = { + # category = gene_baldness + # template = male_pattern_baldness + #} + has_character_modifier = hajj_halq_modifier + has_character_modifier = shaven_bald_modifier + } +} diff --git a/common/scripted_triggers/mpo_scripted_triggers.txt b/common/scripted_triggers/mpo_scripted_triggers.txt new file mode 100644 index 00000000..8d771f2c --- /dev/null +++ b/common/scripted_triggers/mpo_scripted_triggers.txt @@ -0,0 +1,1878 @@ +################################################# +# TRIGGER LIST # +################################################# + +valid_confederation_member_trigger = { + is_playable_character = yes + is_tributary = no + is_landed = yes + is_independent_ruler = yes + is_alive = yes + NOR = { + has_trait = conqueror + has_trait = greatest_of_khans + is_at_war_with = $CHARACTER$ + is_at_war_with = $CHARACTER$.top_liege + custom_tooltip = { + text = no_raiding_hostility_tt + $CHARACTER$ = { + is_causing_raid_hostility_towards = prev + } + } + } + highest_held_title_tier <= tier_duchy + trigger_if = { + limit = { + government_has_flag = government_is_nomadic + } + custom_tooltip = { + text = low_authority_tt + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + } + } + } + custom_tooltip = { + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + text = is_nomadic_or_tribal_tt + } + is_confederation_member = no +} + +confedration_foe_sub_trigger = { + NOT = { is_allied_to = $CHARACTER$ } + OR = { + has_trait = conqueror + has_trait = greatest_of_khans + highest_held_title_tier >= tier_kingdom + custom_tooltip = { + text = call_for_confederation_decision_gurkhan + is_gurkhan = yes + } + custom_tooltip = { + text = considers_faith_evil_tt + faith = { + faith_hostility_level = { + target = $CHARACTER$.faith + value >= faith_evil_level + } + } + } + } + trigger_if = { + limit = { + max_military_strength > 0 + $CHARACTER$.max_military_strength > 0 + } + custom_tooltip = { + text = superior_max_military_strength_tt + confederation_worthy_foe_strength_ratio_value <= 0.5 + } + } +} + +confederation_foe_trigger = { + save_temporary_scope_as = confederate + + #NEED TO UPDATE CUSTOM TOOLTIP WHENEVER THESE TRIGGERS ARE CHANGED + custom_tooltip = { + text = confederation_threat_tt + #I'M FRICKING SERIOUS ABOUT THAT + OR = { + #Threat is in same de jure kingdom as capital county + capital_county = { + kingdom = { + any_de_jure_county = { + holder.top_liege = { + confedration_foe_sub_trigger = { CHARACTER = $CHARACTER$ } + } + } + } + } + #Threat borders you or your tributaries + any_land_neighboring_realm_with_tributaries_owner = { + confedration_foe_sub_trigger = { CHARACTER = $CHARACTER$ } + } + #You border threat's direct tributaries + any_land_neighboring_realm_with_tributaries_owner = { + exists = suzerain + suzerain = { + confedration_foe_sub_trigger = { CHARACTER = $CHARACTER$ } + } + } + #You border threat's lower level tributaries + any_land_neighboring_realm_with_tributaries_owner = { + is_tributary = yes + top_suzerain = { + confedration_foe_sub_trigger = { CHARACTER = $CHARACTER$ } + } + } + } + } +} + +confederation_neighboring_foe_trigger = { + save_temporary_scope_as = confederate + is_confederation_member = no + OR = { + #Threat borders you or your tributaries + any_land_neighboring_realm_with_tributaries_owner = { + confedration_foe_sub_trigger = { CHARACTER = $CHARACTER$ } + } + #You border threat's direct tributaries + any_land_neighboring_realm_with_tributaries_owner = { + exists = suzerain + suzerain = { + confedration_foe_sub_trigger = { CHARACTER = $CHARACTER$ } + } + } + #You border threat's lower level tributaries + any_land_neighboring_realm_with_tributaries_owner = { + is_tributary = yes + top_suzerain = { + confedration_foe_sub_trigger = { CHARACTER = $CHARACTER$ } + } + } + } + +} + +mpo_important_beheaded_warrior_trigger = { + OR = { + scope:beheaded_warrior = { + is_consort_of = root + } + scope:beheaded_warrior = { + is_close_family_of = root + } + has_variable = beheaded_warrior_powerful_vassal + AND = { + has_variable = beheaded_warrior_accolade + var:beheaded_warrior_accolade = { + accolade_rank >= 5 + } + } + } +} + +mpo_keep_prisoners_heads_trigger = { + OR = { + faith.religion = faith:tengri_pagan.religion + has_trait = greatest_of_khans + has_trait = nomadic_philosophy + } +} + +mpo_valid_heir_friend_trigger = { + age >= 12 + opinion = { + target = $CHARACTER$ + value >= 50 + } + NOR = { + is_at_war_with = $CHARACTER$ + this = $CHARACTER$ + this = $CHARACTER$.player_heir + } + NOT = { + has_relation_blood_brother = $CHARACTER$.player_heir + } + custom_description = { + text = not_friends_with_player_heir_tt + NOR = { + has_relation_friend = $CHARACTER$.player_heir + has_relation_best_friend = $CHARACTER$.player_heir + } + } + custom_description = { + text = not_bad_relation_with_player_heir_tt + NOT = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = $CHARACTER$.player_heir } + } + } + is_imprisoned = no + is_incapable = no + OR = { + custom_description = { + text = is_nomadic_tt + government_has_flag = government_is_nomadic + } + has_trait = nomadic_philosophy + } + highest_held_title_tier >= tier_county +} + +mpo_overrunner_becomes_tribal_trigger = { + scope:target = { + any_de_jure_county = { + holder.top_liege = scope:defender + add_to_temporary_list = target_counties + } + } + OR = { + #Defender is tribal and holds title + AND = { + scope:target = { + holder ?= scope:defender + } + scope:defender = { + government_has_flag = government_is_tribal + } + } + #Defender is tribal and all counties they hold are tribal + AND = { + scope:defender = { + government_has_flag = government_is_tribal + } + any_in_list = { + list = target_counties + count >= all + any_county_province = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + #New capital county will be tribal + trigger_if = { + limit = { + scope:target = { + title_capital_county = { + holder.top_liege = scope:defender + } + } + } + scope:target = { + title_capital_county = { + holder.top_liege = scope:defender + any_county_province = { + is_county_capital = yes + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + } + #New potential duchy capitals are tribal + trigger_else_if = { + limit = { + scope:target = { + any_direct_de_jure_vassal_title = { + tier = tier_duchy + title_capital_county = { + holder.top_liege = scope:defender + } + } + } + } + scope:target = { + any_direct_de_jure_vassal_title = { + count = all + tier = tier_duchy + title_capital_county = { + holder.top_liege = scope:defender + any_county_province = { + is_county_capital = yes + has_holding = yes + NOR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + } + } + #Every county is tribal + trigger_else = { + scope:target = { + any_de_jure_county = { + count >= all + holder.top_liege = scope:defender + any_county_province = { + is_county_capital = yes + NOR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + } + } +} + +mpo_overrunner_becomes_clan_trigger = { + scope:attacker = { + OR = { + #Personal reasons to go clan + faith.religion = religion:islam_religion + culture = { + OR = { + has_cultural_pillar = heritage_arabic + has_cultural_pillar = heritage_iranian + } + } + #Person you're taking from has clan and presence in target region + scope:defender = { + government_has_flag = government_is_clan + scope:target = { + holder ?= scope:defender + } + scope:target = { + title_capital_county = { + holder.top_liege = scope:defender + OR = { + culture = { has_cultural_pillar = heritage_arabic } + culture = { has_cultural_pillar = heritage_iranian } + faith.religion = religion:islam_religion + } + } + } + } + #Solid islamic presence in target region + trigger_if = { + limit = { + scope:defender = { + any_realm_de_jure_duchy = { + kingdom = scope:target + title_capital_county = { + holder.top_liege = scope:defender + } + } + } + } + scope:defender = { + any_realm_de_jure_duchy = { + count = all + kingdom = scope:target + title_capital_county = { + holder.top_liege = scope:defender + OR = { + culture = { has_cultural_pillar = heritage_arabic } + culture = { has_cultural_pillar = heritage_iranian } + faith.religion = religion:islam_religion + } + } + + } + } + } + #Every county is islamic + trigger_else = { + scope:target = { + any_de_jure_county = { + count = all + holder.top_liege = scope:defender + OR = { + culture = { has_cultural_pillar = heritage_arabic } + culture = { has_cultural_pillar = heritage_iranian } + faith.religion = religion:islam_religion + } + } + } + } + + } + } +} + +mpo_overrunner_becomes_tribal_desc_trigger = { + any_in_list = { + list = target_titles + tier = tier_kingdom + any_de_jure_county = { + holder.top_liege = scope:defender + add_to_temporary_list = target_counties + } + } + OR = { + #Defender is tribal and holds title + AND = { + any_in_list = { + list = target_titles + tier = tier_kingdom + holder ?= scope:defender + } + scope:defender = { + government_has_flag = government_is_tribal + } + } + #Defender is tribal and all counties they hold are tribal + AND = { + scope:defender = { + government_has_flag = government_is_tribal + } + any_in_list = { + list = target_counties + count >= all + any_county_province = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + #New capital county will be tribal + trigger_if = { + limit = { + any_in_list = { + list = target_titles + tier = tier_kingdom + title_capital_county = { + holder.top_liege = scope:defender + } + } + } + any_in_list = { + list = target_titles + tier = tier_kingdom + title_capital_county = { + holder.top_liege = scope:defender + any_county_province = { + is_county_capital = yes + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + } + #New potential duchy capitals are tribal + trigger_else_if = { + limit = { + any_in_list = { + list = target_titles + tier = tier_kingdom + any_direct_de_jure_vassal_title = { + tier = tier_duchy + title_capital_county = { + holder.top_liege = scope:defender + } + } + } + } + any_in_list = { + list = target_titles + tier = tier_kingdom + any_direct_de_jure_vassal_title = { + count = all + tier = tier_duchy + title_capital_county = { + holder.top_liege = scope:defender + any_county_province = { + is_county_capital = yes + has_holding = yes + NOR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + } + } + #Every county is tribal + trigger_else = { + any_in_list = { + list = target_titles + tier = tier_kingdom + any_de_jure_county = { + count >= all + holder.top_liege = scope:defender + any_county_province = { + is_county_capital = yes + NOR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + } + } +} + +mpo_overrunner_becomes_clan_desc_trigger = { + scope:attacker = { + OR = { + #Personal reasons to go clan + faith.religion = religion:islam_religion + culture = { + OR = { + has_cultural_pillar = heritage_arabic + has_cultural_pillar = heritage_iranian + } + } + #Person you're taking from has clan and presence in target region + scope:defender = { + government_has_flag = government_is_clan + any_in_list = { + list = target_titles + tier = tier_kingdom + holder ?= scope:defender + } + any_in_list = { + list = target_titles + tier = tier_kingdom + title_capital_county = { + holder.top_liege = scope:defender + OR = { + culture = { has_cultural_pillar = heritage_arabic } + culture = { has_cultural_pillar = heritage_iranian } + faith.religion = religion:islam_religion + } + } + } + } + #Solid islamic presence in target region + trigger_if = { + limit = { + scope:defender = { + any_realm_de_jure_duchy = { + kingdom = { + is_in_list = target_titles + } + title_capital_county = { + holder.top_liege = scope:defender + } + } + } + } + scope:defender = { + any_realm_de_jure_duchy = { + count = all + kingdom = { + is_in_list = target_titles + } + title_capital_county = { + holder.top_liege = scope:defender + OR = { + culture = { has_cultural_pillar = heritage_arabic } + culture = { has_cultural_pillar = heritage_iranian } + faith.religion = religion:islam_religion + } + } + + } + } + } + #Every county is islamic + trigger_else = { + any_in_list = { + list = target_titles + tier = tier_kingdom + any_de_jure_county = { + count = all + holder.top_liege = scope:defender + OR = { + culture = { has_cultural_pillar = heritage_arabic } + culture = { has_cultural_pillar = heritage_iranian } + faith.religion = religion:islam_religion + } + } + } + } + + } + } +} + +mpo_overrunning_willing_vassal_trigger = { + is_ai = yes + OR = { + opinion = { + target = liege + value >= 50 + } + culture = liege.culture + is_obedient_to = liege + AND = { + is_close_family_of = liege + opinion = { + target = liege + value > 0 + } + } + } + highest_held_title_tier >= tier_county + government_has_flag = government_is_nomadic + highest_held_title_tier < tier_kingdom + NOT = { government_has_flag = government_is_herder } +} + +is_tsagaan_sar = { + scope:activity = { + has_activity_option = { + category = special_type + option = feast_type_tsagaan_sar + } + } +} +has_eligible_artifact_trigger = { + any_artifact = { + artifact_owner = root + NOR = { + has_variable = banner_house + has_variable = banner_dynasty + has_variable = 1025_treasure_map + } + count >= 2 + } +} + +can_gift_anything_trigger = { + OR = { + short_term_gold >= miniscule_gold_value + AND = { + domicile ?= { herd >= twenty_percent_herd_value } + involved_activity.var:host_var = { + domicile ?= { herd < max_herd } + } + } + any_artifact = { + artifact_owner = root + NOR = { + has_variable = banner_house + has_variable = banner_dynasty + has_variable = 1025_treasure_map + } + count >= 2 + } + } +} + +mpo_valid_dead_husband_trigger = { + government_has_flag = government_is_nomadic + is_married = yes + is_male = yes + primary_spouse = { + is_adult = yes + NOR = { + is_imprisoned = yes + has_contagious_deadly_disease_trigger = yes + has_trait = incapable + is_ruler = yes + has_trait = celibate + has_trait = devoted + } + save_temporary_scope_as = widow + } + trigger_if = { + limit = { + is_ruler = yes + } + OR = { + NOT = { + exists = primary_heir + } + primary_heir = { + is_ai = yes + } + primary_heir = { + mpo_valid_widow_marrier_trigger = yes + } + } + + } +} + + +mpo_valid_widow_marrier_trigger = { + #Is a playable character or primary_heir + OR = { + root.primary_heir ?= this + AND = { + highest_held_title_tier >= tier_county + is_playable_character = yes + OR = { + #Root is wandering landless + root = { + is_ruler = no + NOT = { + exists = liege + } + } + #Is root's liege + root.liege ?= this + #Is root's top liege + root.top_liege ?= this + #root has no primary heir + NOT = { + exists = root.primary_heir + } + #root's primary heir is not of house + NOT = { + exists = root.primary_heir.house + } + AND = { + exists = root.house + NOT = { + root.house = root.primary_heir.house + } + } + } + + } + } + + OR = { + has_trait = nomadic_philosophy + culture = { + has_cultural_pillar = heritage_mongolic + } + culture = { + has_cultural_pillar = heritage_turkic + } + faith.religion = faith:tengri_pagan.religion + } + #Can have multiple wives or concubines + faith = { + OR = { + has_doctrine = doctrine_polygamy + has_doctrine = doctrine_concubines + } + } + is_male = yes + is_adult = yes + NOR = { + has_trait = celibate + has_trait = eunuch + has_trait = devoted + } + #Has a free slot for a wife or concubine + OR = { + allowed_more_spouses = yes + allowed_more_concubines = yes + } + #Can marry the widow + NOT = { + relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = scope:widow } + } +} + +mpo_nomads_camel_culture_trigger = { + culture = { + OR = { + has_cultural_tradition = tradition_dryland_dwellers + has_cultural_tradition = tradition_warriors_of_the_dry + has_cultural_tradition = tradition_desert_ribat + has_cultural_tradition = tradition_desert_nomads + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_mubarizuns + has_cultural_tradition = tradition_saharan_nomads + } + } +} + +mpo_nomads_sheep_culture_trigger = { + culture = { + OR = { + has_cultural_tradition = tradition_amharic_highlanders + has_cultural_tradition = tradition_dryland_dwellers + has_cultural_tradition = tradition_hill_dwellers + has_cultural_tradition = tradition_mountain_homes + has_cultural_tradition = tradition_highland_warriors + has_cultural_tradition = tradition_mountaineers + has_cultural_tradition = tradition_culinary_art + has_cultural_tradition = tradition_festivities + has_cultural_tradition = tradition_sacred_mountains + has_cultural_tradition = tradition_himalayan_settlers + has_cultural_tradition = tradition_ep3_indomitable_azatani + has_cultural_tradition = tradition_caucasian_wolves + has_cultural_tradition = tradition_fp3_irrigation_experts + has_cultural_tradition = tradition_mountain_herding + has_cultural_tradition = tradition_horn_mountain_skirmishing + has_cultural_tradition = tradition_mountaineer_ruralism + has_cultural_tradition = tradition_upland_skirmishing + } + } +} +mpo_nomads_hunting_culture_trigger = { + culture = { + OR = { + has_cultural_tradition = tradition_forest_folk + has_cultural_tradition = tradition_jungle_dwellers + has_cultural_tradition = tradition_wetlanders + has_cultural_tradition = tradition_forest_fighters + has_cultural_tradition = tradition_jungle_warriors + has_cultural_tradition = tradition_ep2_avid_falconers + has_cultural_tradition = tradition_hunters + has_cultural_tradition = tradition_sacred_groves + has_cultural_tradition = tradition_sacred_hunts + has_cultural_tradition = tradition_bush_hunting + has_cultural_tradition = tradition_forest_wardens + } + } +} +mpo_nomads_horse_culture_trigger = { + culture = { + OR = { + has_cultural_tradition = tradition_pastoralists + has_cultural_tradition = tradition_hit_and_run + has_cultural_tradition = tradition_vegetarianism + has_cultural_tradition = tradition_ep3_audacious_cadets + has_cultural_tradition = tradition_fp3_fierce_independence + has_cultural_tradition = tradition_fp3_frontier_warriors + has_cultural_tradition = tradition_ep3_indomitable_azatani + has_cultural_tradition = tradition_caucasian_wolves + has_cultural_tradition = tradition_hussar + has_cultural_tradition = tradition_roman_legacy + has_cultural_tradition = tradition_horse_breeder + has_cultural_tradition = tradition_chivalry + } + } +} + +is_similar_age_trigger = { + $CHARACTER$ = { + age >= root.age_minus_ten + age <= root.age_plus_ten + } +} + +mpo_lower_nomad_authority_trigger = { + OR = { + AND = { + has_realm_law = nomadic_authority_1 + $CHARACTER$ = { + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + } + AND = { + has_realm_law = nomadic_authority_2 + $CHARACTER$ = { + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + } + AND = { + has_realm_law = nomadic_authority_3 + $CHARACTER$ = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + } + AND = { + has_realm_law = nomadic_authority_4 + $CHARACTER$ = { + has_realm_law = nomadic_authority_5 + } + } + } +} + +mpo_can_recruit_nomad_maa_trigger = { + OR = { + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + } +} + +mpo_can_recruit_nomad_heavy_cavalry_maa_trigger = { + OR = { + AND = { + government_has_flag = government_is_nomadic + has_realm_law_flag = unlock_maa_nomad_lancers + } + AND = { + NOT = { + government_has_flag = government_is_nomadic + } + has_trait = nomadic_philosophy + } + } +} + +can_have_tributaries_trigger = { + has_realm_law_flag = can_have_tributaries + is_independent_ruler = yes + NOT = { government_has_flag = government_is_herder } +} + +can_get_tributaries_peacefully_trigger = { + can_have_tributaries_trigger = yes + has_government = nomad_government +} + +mpo_valid_for_blood_brotherhood_trigger = { + OR = { + government_has_flag = government_is_nomadic + has_trait = nomadic_philosophy + #TODO_MPO_CD blood brother tradition tie-in + } +} + +mpo_can_be_blood_brothers_trigger = { + #If one is a child, the other must be a child + trigger_if = { + limit = { + $CHARACTER_1$ = { + is_adult = no + } + } + $CHARACTER_1$ = { + is_adult = yes + } + } + trigger_if = { + limit = { + $CHARACTER_2$ = { + is_adult = no + } + } + $CHARACTER_2$ = { + is_adult = yes + } + } + #They can't be related enough to be allies + NOR = { + #Ruler is married to other ruler. + $CHARACTER_1$ = { is_spouse_of = $CHARACTER_2$ } + #Ruler is relative of other ruler + $CHARACTER_1$ = { is_parent_of = $CHARACTER_2$ } + $CHARACTER_1$ = { is_grandparent_of = $CHARACTER_2$ } + $CHARACTER_1$ = { is_great_grandparent_of = $CHARACTER_2$ } + $CHARACTER_1$ = { is_child_of = $CHARACTER_2$ } + $CHARACTER_1$ = { is_grandchild_of = $CHARACTER_2$ } + $CHARACTER_1$ = { is_great_grandchild_of = $CHARACTER_2$ } + $CHARACTER_1$ = { is_uncle_or_aunt_of = $CHARACTER_2$ } + $CHARACTER_1$ = { is_nibling_of = $CHARACTER_2$ } + $CHARACTER_1$ = { is_sibling_of = $CHARACTER_2$ } + } + + # We can't do most of the standard checks for can_set_relation_best_friend_trigger, but we do the relevant ones individually. + custom_tooltip = { + text = make_blood_brother_interaction.tt.already_blood_brothers + $CHARACTER_1$ = { + NOT = { has_relation_blood_brother = $CHARACTER_2$ } + } + } + trigger_if = { + limit = { + NOT = { + $CHARACTER_1$ = { has_relation_blood_brother = $CHARACTER_2$ } + } + } + custom_tooltip = { + text = make_blood_brother_interaction.tt.actor_has_blood_brother + $CHARACTER_1$ = { num_of_relation_blood_brother = 0 } + } + } + trigger_if = { + limit = { + NOT = { + $CHARACTER_2$ = { has_relation_blood_brother = $CHARACTER_1$ } + } + } + custom_tooltip = { + text = make_blood_brother_interaction.tt.recipient_has_blood_brother + $CHARACTER_2$ = { num_of_relation_blood_brother = 0 } + } + } + trigger_if = { + limit = { + $CHARACTER_1$ = { + is_at_war = yes + } + } + $CHARACTER_1$ = { + NOR = { + is_at_war_with = $CHARACTER_2$ + custom_tooltip = { + text = make_blood_brother_at_war_with_recipient_ally + any_war_enemy = { + is_allied_to = $CHARACTER_2$ + } + } + } + } + } + trigger_if = { + limit = { + $CHARACTER_2$ = { + is_at_war = yes + } + } + $CHARACTER_2$ = { + NOR = { + is_at_war_with = $CHARACTER_1$ + custom_tooltip = { + text = make_blood_brother_at_war_with_actor_ally + any_war_enemy = { + is_allied_to = $CHARACTER_1$ + } + } + } + } + } + #Can only do intergender if gender laws are equal or both are rulers + trigger_if = { + limit = { + OR = { + AND = { + $CHARACTER_1$ = { + is_male = yes + } + $CHARACTER_2$ = { + is_female = yes + } + } + AND = { + $CHARACTER_2$ = { + is_male = yes + } + $CHARACTER_1$ = { + is_female = yes + } + } + } + $CHARACTER_1$.faith = { + NOT = { has_doctrine_parameter = gender_equal_law } + } + } + custom_tooltip = { + text = make_blood_brother_interaction_intergender_req + AND = { + $CHARACTER_1$ = { + is_ruler = yes + } + $CHARACTER_2$ = { + is_ruler = yes + } + } + } + } +} + +mpo_blood_brother_common_enemy_sub_trigger = { + NOR = { + this = scope:recipient + this = scope:actor + } + OR = { + #Rival of common foe + has_relation_rival = scope:recipient + #Is at war with common foe, you're not involved + AND = { + NOT = { has_variable = rebel_leader_peasants } + save_temporary_scope_as = root_temp + any_character_war = { + is_war_leader = scope:root_temp + is_war_leader = scope:recipient + } + } + #Is in a faction against common foe + any_targeting_faction = { + any_faction_member = { + this = scope:recipient + } + } + #common foe is in a faction against recipient + AND = { + is_independent_ruler = no + save_temporary_scope_as = rival_temp + liege ?= { + any_targeting_faction = { + any_faction_member = { this = scope:rival_temp } + } + } + } + #Recipient is title claimant against common foe + any_held_title = { + save_temporary_scope_as = title_temp + scope:recipient = { has_claim_on = scope:title_temp } + NOT = { + scope:actor = { has_claim_on = scope:title_temp } + } + } + #common foe is title claimant against recipient + any_claim = { + save_temporary_scope_as = claim_temp + holder ?= scope:recipient + NOT = { + scope:actor = { has_claim_on = scope:claim_temp } + } + } + #Has house feud with common foe's house + AND = { + exists = house.house_head + exists = scope:recipient.house + exists = scope:actor.house + NOR = { + house = scope:actor.house + house = scope:recipient.house + scope:actor.house = scope:recipient.house + } + house.house_head = { + any_owned_story = { + story_type = story_cycle_house_feud + var:house_feud_house = scope:recipient.house + } + } + } + } +} + +mpo_blood_brother_common_enemy_trigger = { + scope:actor = { + OR = { + #You have a rival that recipient is also opposed to + any_relation = { + type = rival + mpo_blood_brother_common_enemy_sub_trigger = yes + } + #You are at war with someone that recipient is also opposed to + any_war_enemy = { + NOT = { has_variable = rebel_leader_peasants } + any_character_war = { + is_war_leader = prev + is_war_leader = scope:actor + } + mpo_blood_brother_common_enemy_sub_trigger = yes + } + #You are in a faction against someone that recipient is also opposed to + liege ?= { + any_targeting_faction = { + any_faction_member = { + this = scope:actor + } + } + mpo_blood_brother_common_enemy_sub_trigger = yes + } + #You have a faction member that recipient is also opposed to + any_targeting_faction = { + any_faction_member = { + mpo_blood_brother_common_enemy_sub_trigger = yes + } + } + #You have a title claimant that recipient is also opposed to + any_held_title = { + NOT = { + scope:recipient = { + has_claim_on = prev + } + } + any_claimant = { + mpo_blood_brother_common_enemy_sub_trigger = yes + } + } + #You are a title claimant against someone recipient is also opposed to + any_claim = { + exists = holder + NOT = { + scope:recipient = { has_claim_on = prev } + } + holder = { + mpo_blood_brother_common_enemy_sub_trigger = yes + } + } + #You have a house feud against someone recipient is also opposed to + AND = { + exists = house.house_head + exists = scope:recipient.house + NOT = { + house = scope:recipient.house + } + house.house_head = { + any_owned_story = { + story_type = story_cycle_house_feud + var:house_feud_house.house_head ?= { + mpo_blood_brother_common_enemy_sub_trigger = yes + } + } + } + } + } + } +} + +mpo_blood_brother_reason_memory_trigger = { + OR = { + has_memory_type = was_adopted + has_memory_type = adopted_a_child + has_memory_type = friend_granted_my_claim + has_memory_type = match_made + has_memory_type = completed_pilgrimage_friend + has_memory_type = noble_family_adopted + has_memory_type = was_noble_family_adopted + has_memory_type = adventurer_family_adopted + has_memory_type = was_adventurer_family_adopted + has_memory_type = saved_someone_from_a_bull_memory + has_memory_type = knight_sacrificed_memory + has_memory_type = saved_from_assault_memory + has_memory_type = forgave_and_released_prisoner_memory + has_memory_type = rescued_fallen_victim_memory + has_memory_type = nice_fishing_trip + has_memory_type = reading_aid + has_memory_type = supported_illiterate + has_memory_type = lost_my_addiction_memory + has_memory_type = friend_despite_rivalry + has_memory_type = witnessed_death_battle_good_killer + has_memory_type = cared_for_by_host + has_memory_type = hostage_oath_of_friendship + has_memory_type = procured_estate_memory + has_memory_type = evangelized_memory + has_memory_type = was_evangelized_memory + has_memory_type = pledged_marriage + } +} + +mpo_ideal_common_foe_trigger = { + trigger_if = { + limit = { + highest_held_title_tier >= tier_kingdom + } + reverse_opinion = { + target = scope:actor + value <= 60 + } + } + trigger_else = { + highest_held_title_tier >= tier_duchy + reverse_opinion = { + target = scope:actor + value <= 20 + } + } +} + +mpo_blood_brother_august_trigger = { + prestige_level >= $OTHER_BROTHER$.prestige_level + OR = { + prestige_level >= 4 + highest_held_title_tier >= tier_kingdom + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + OR = { + highest_held_title_tier > $OTHER_BROTHER$.highest_held_title_tier + AND = { + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + $OTHER_BROTHER$ = { + has_realm_law = nomadic_authority_1 + } + } + AND = { + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + $OTHER_BROTHER$ = { + has_realm_law = nomadic_authority_2 + } + } + AND = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + $OTHER_BROTHER$ = { + has_realm_law = nomadic_authority_3 + } + } + AND = { + has_realm_law = nomadic_authority_5 + $OTHER_BROTHER$ = { + has_realm_law = nomadic_authority_4 + } + } + } +} + +mpo_blood_brother_warrior_trigger = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $OTHER_BROTHER$ } + OR = { + prowess >= monumentally_high_skill_rating + AND = { + prowess >= extremely_high_skill_rating + OR = { + has_trait = lifestyle_blademaster + has_trait = education_martial_prowess_3 + has_trait = education_martial_prowess_4 + AND = { + has_trait = tourney_participant + OR = { + has_trait_xp = { + trait = tourney_participant + value >= 50 + track = foot + } + has_trait_xp = { + trait = tourney_participant + value >= 50 + track = horse + } + has_trait_xp = { + trait = tourney_participant + value >= 50 + track = bow + } + } + } + has_trait = berserker + has_trait = sadistic + has_trait = vengeful + has_trait = brave + has_trait = wrathful + has_trait = aggressive_attacker + has_trait = reaver + } + } + martial >= extremely_high_skill_rating + AND = { + OR = { + prowess >= very_high_skill_rating + has_trait = education_martial + has_lifestyle = martial_lifestyle + } + dread >= 60 + } + } +} + +mpo_blood_brother_clever_trigger = { + OR = { + has_trait = intellect_good_3 + has_trait = shrewd + learning > extremely_high_skill_rating + stewardship > extremely_high_skill_rating + intrigue > extremely_high_skill_rating + diplomacy > extremely_high_skill_rating + } +} +mpo_blood_brother_loving_trigger = { + ai_compassion > low_negative_ai_value + OR = { + has_trait = trusting + has_trait = compassionate + has_trait = generous + has_trait = loyal + has_trait = gregarious + has_trait = forgiving + has_trait = family_first + } +} + +has_bad_season_nomadic_capital_root_trigger = { + any_county_situation = { + OR = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_white_zud_season + situation_sub_region_has_county = root.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_cold_zud_season + situation_sub_region_has_county = root.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_severe_drought_season + situation_sub_region_has_county = root.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = root.capital_county + } + } + } +} + +has_zud_season_nomadic_capital_root_trigger = { + any_character_situation = { + OR = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_white_zud_season + situation_sub_region_has_county = root.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_cold_zud_season + situation_sub_region_has_county = root.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = root.capital_county + } + } + } +} + +has_zud_season_in_county_trigger = { + any_character_situation = { + OR = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_white_zud_season + situation_sub_region_has_county = $COUNTY$ + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_cold_zud_season + situation_sub_region_has_county = $COUNTY$ + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = $COUNTY$ + } + } + } +} + +has_bad_season_nomadic_capital_character_trigger = { + any_character_situation = { + OR = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_white_zud_season + situation_sub_region_has_county = $CHARACTER$.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_cold_zud_season + situation_sub_region_has_county = $CHARACTER$.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_severe_drought_season + situation_sub_region_has_county = $CHARACTER$.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = $CHARACTER$.capital_county + } + } + } +} + +has_bad_season_in_county_trigger = { + any_county_situation = { + OR = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_white_zud_season + situation_sub_region_has_county = $COUNTY$ + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_cold_zud_season + situation_sub_region_has_county = $COUNTY$ + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_severe_drought_season + situation_sub_region_has_county = $COUNTY$ + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = $COUNTY$ + } + } + } +} + +has_good_season_nomadic_capital_root_trigger = { + any_character_situation = { + OR = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_abundant_grazing_season + situation_sub_region_has_county = root.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_warm_nights_season + situation_sub_region_has_county = root.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_sky_blessing_season + situation_sub_region_has_county = root.capital_county + + } + } + } +} + +has_good_season_nomadic_capital_character_trigger = { + any_character_situation = { + OR = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_abundant_grazing_season + situation_sub_region_has_county = $CHARACTER$.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_warm_nights_season + situation_sub_region_has_county = $CHARACTER$.capital_county + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_sky_blessing_season + situation_sub_region_has_county = $CHARACTER$.capital_county + } + } + } +} + +has_good_season_in_county_trigger = { + any_county_situation = { + OR = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_abundant_grazing_season + situation_sub_region_has_county = $COUNTY$ + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_warm_nights_season + situation_sub_region_has_county = $COUNTY$ + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_sky_blessing_season + situation_sub_region_has_county = $COUNTY$ + + } + } + } +} + +great_steppe_not_in_sub_region_trigger = { + situation:the_great_steppe ?= { + NOT = { + any_situation_sub_region = { + situation_sub_region_has_geographical_region = geographical_region:$REGION$ + } + } + } +} + +is_gurkhan = { + trigger_if = { + limit = { exists = situation:the_great_steppe } + this = situation:the_great_steppe.situation_top_herd + } +} + +mpo_permafrost_building_trigger = { + trigger_if = { + limit = { + county = { + has_county_modifier = mpo_siberian_permafrost_modifier + } + } + culture ?= scope:holder.culture + culture ?= { + has_cultural_tradition = tradition_mpo_northern_tribes + } + } +} + +has_raid_intent_protection = { + scope:county.duchy = { + any_in_de_jure_hierarchy = { + tier = tier_county + holder.top_liege = scope:county.holder.top_liege + any_county_province = { + has_building_with_flag = raid_protection_1 + } + } + } +} + +has_raid_intent_immunity = { + scope:county.duchy = { + any_in_de_jure_hierarchy = { + tier = tier_county + holder.top_liege = scope:county.holder.top_liege + any_county_province = { + has_building_with_flag = raid_protection_2 + } + } + } +} + +has_chaotic_succession_trigger = { # Used to set up right scopes for Important Action + capital_county ?= { + any_county_situation = { + any_participant_group = { + participant_group_type = nomad_rulers_capital + } + any_situation_sub_region = { + save_temporary_scope_as = subregion + } + } + } + has_chaotic_succession_trigger_action = yes +} + +has_chaotic_succession_trigger_action = { # Used in both Rules and Important Action + save_temporary_scope_as = root_scope + OR = { + trigger_if = { + limit = { + exists = scope:subregion + } + custom_tooltip = { + text = chaotic_succession_havsarsan_zud + scope:subregion ?= { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + } + } + } + trigger_if = { + limit = { + mpo_current_disobedient_kurultai_value >= 1 + } + custom_tooltip = { + text = chaotic_succession_disobedient_kurultai + always = yes + } + } + trigger_else = { + custom_tooltip = { + text = chaotic_succession_disobedient_kurultai_none + always = no + } + } + trigger_if = { + limit = { + OR = { + NOT = { exists = cp:councillor_kurultai_1 } + NOT = { exists = cp:councillor_kurultai_2 } + NOT = { exists = cp:councillor_kurultai_3 } + NOT = { exists = cp:councillor_kurultai_4 } + } + } + custom_tooltip = { + text = is_kurultai_succession_chaotic_empty_kurultai + always = yes + } + } + trigger_else = { + custom_tooltip = { + text = is_kurultai_succession_chaotic_empty_kurultai_none + always = no + } + } + } + trigger_if = { + limit = { + any_held_title = { + has_variable = chaotic_succession_protection + } + } + custom_tooltip = { + text = chaotic_succession_protection_tt + NOT = { + any_held_title = { + has_variable = chaotic_succession_protection + } + } + } + } + trigger_if = { + limit = { + primary_title ?= { + has_title_law = confederation_elective_succession_law + } + } + custom_tooltip = { + text = chaotic_succession_protection_title_law_tt + NOT = { + primary_title ?= { + has_title_law = confederation_elective_succession_law + } + } + } + } +} + +mpo_de_jure_shifting_triggers = { + NOR = { + target_is_de_jure_liege_or_above = root.primary_title + any_de_jure_county_holder = { + NOR = { + root = { is_liege_or_above_of = prev } + is_tributary_of_suzerain_or_above = root + top_liege = { + is_tributary_of_suzerain_or_above = root + } + } + } + any_de_jure_county = { + NOT = { + any_county_situation = { + any_participant_group = { + participant_group_type = nomad_rulers_capital + } + } + } + } + } + any_title_to_title_neighboring_$UPPER_TIER$ = { + this = root.primary_title + } +} + +vassal_grant_de_jure_shift_trigger = { + tier >= tier_duchy + tier = scope:secondary_actor.highest_held_title_tier + NOR = { + target_is_de_jure_liege_or_above = scope:recipient.primary_title + any_de_jure_county = { + any_county_situation = { + any_participant_group = { + participant_group_type = nomad_rulers_capital + } + } + } + any_de_jure_county_holder = { + NOR = { + any_liege_or_above = { + this = scope:recipient + } + is_tributary_of_suzerain_or_above = scope:recipient + top_liege = { + is_tributary_of_suzerain_or_above = scope:recipient + } + } + } + } + switch = { + trigger = scope:secondary_actor.highest_held_title_tier + tier_kingdom = { + any_title_to_title_neighboring_kingdom = { + this = scope:recipient.primary_title + } + } + tier_duchy = { + any_title_to_title_neighboring_kingdom = { + this = scope:recipient.primary_title + } + } + } +} + +higher_dominance_trigger = { + $FIRST_TARGET$ = { + switch = { + trigger = has_realm_law + nomadic_authority_5 = { + $SECOND_TARGET$ = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_1 + } + } + } + nomadic_authority_4 = { + $SECOND_TARGET$ = { + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_1 + } + } + } + nomadic_authority_3 = { + $SECOND_TARGET$ = { + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_1 + } + } + } + nomadic_authority_2 = { + $SECOND_TARGET$ = { + has_realm_law = nomadic_authority_1 + } + } + } + } +} + +higher_or_equal_dominance_trigger = { + $FIRST_TARGET$ = { + switch = { + trigger = has_realm_law + nomadic_authority_5 = { + $SECOND_TARGET$ = { + OR = { + has_realm_law = nomadic_authority_5 + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_1 + } + } + } + nomadic_authority_4 = { + $SECOND_TARGET$ = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_1 + } + } + } + nomadic_authority_3 = { + $SECOND_TARGET$ = { + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_1 + } + } + } + nomadic_authority_2 = { + $SECOND_TARGET$ = { + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_1 + } + } + } + nomadic_authority_2 = { + $SECOND_TARGET$ = { + has_realm_law = nomadic_authority_1 + } + } + } + } +} + +#any_county scope +county_ready_for_abuse_trigger = { + uses_county_fertility = yes + any_county_situation = { this = situation:the_great_steppe } + holder = { + is_ai = yes + } + NOR = { + holder = root + holder = situation:the_great_steppe.situation_top_herd + has_county_modifier = mpo_paiza_abused_county_modifier + } +} + diff --git a/common/subject_contracts/contracts/_subject_contracts.info b/common/subject_contracts/contracts/_subject_contracts.info new file mode 100644 index 00000000..0ae9c983 --- /dev/null +++ b/common/subject_contracts/contracts/_subject_contracts.info @@ -0,0 +1,90 @@ +# Obligations - how much does the subject give to their liege. The subject's government type determines which contract type is used. +# Note that the values can be changed with the vassal_tax_contribution_add/mult, vassal_levy_contribution_add/mult and vassal_herd_contribution_add/mult modifiers. (Applies to tributaries as well) + +subject_contract = { + uses_opinion_of_liege = yes/no # if set to yes, scope:opinion_of_liege can be used in the levies and tax script math (it's a value that's updated daily for player contracts, for AI it uses NSubjectContract::OPINION_OF_LIEGE_UPDATE_INTERVAL. No by default for performance reasons. + + display_mode = tree/list/radiobutton # How are the obligations displayed in the negotiate contract UI, default is radiobutton + + # Modifiable contract with multiple levels: + obligation_levels = { + # Scopes available: + # scope:liege the liege in the contract + # scope:subject the subject in the contract + # scope:vassal the subject in the contract. Same as scope:subject. Kept in for backwards compatability. + # scope:opinion_of_liege set if uses_opinion_of_liege = yes + # scope:tax_slot the slot they are in/are being considered to be placed in + # scope:tax_collector the collector for the above/the potential new collector + + subject_obligation_low = { # choose a key for the level, it will be used for localization + levies = 0.5 # % of levies (0..1), default 0; can also use script math + tax = 0.2 # % of gold income (0..1), default 0; Can also use script math + herd = 0.2 # % of herd income (0..1), default 0; Can also use script math + min_levies = 0.1 # Optional min floor on levies. Can also use script math + min_tax = 0.0 # Optional min floor on tax. Can also use script math + min_herd = 0.0 # Optional min floor on herd. Can also use script math + + contribution_desc = { ... } # Optional dynamic description used for the breakdown of the tax, levies and herd contribution + + tax_contribution_postfix = "..." # Optional postfix added to the tax contribution breakdown + levies_contribution_postfix = "..." # Optional postfix added to the levies contribution breakdown + herd_contribution_postfix = "..." # Optional postfix added to the herd contribution breakdown + + unclamped_contribution_label = "..." # Breakdown label for the unclamped tax/levies/herd contribution + min_contribution_label = "..." # Breakdown label for the minimum tax/levies/herd contribution the value is clamped to + + subject_opinion = 0 # value for opinion of liege that's added to subject's opinion of the liege if they have this contract + + flag = token # Arbitrary flag, can be checked in script to see if any obligation level in the current subject contract has a flag + + score = int # Positive means it is better for the subject to have, 0 means neutral, negative is better for liege + # When changing obligations the current score and new score are compared to see if it is in favour of the subject or liege + # and by how much. + # Defaults to order the contracts are defined + + ai_liege_desire =